问题描述
TLDR:我可以在服务器上使用脚本来检查当前的Web浏览器是否已登录到特定的WordPress网站吗?
长版: 我正在尝试在从Icecast服务器流式传输的WordPress网站上设置音频播放器。 Icecast服务器设置为进行“ http”身份验证,因为当它收到文件请求时,它将请求发送到外部服务器以做出是/否决定-将“ ok”标头发送回给服务器服务器,如果一切正常,则允许来自WordPress网站的原始请求。
对于最终用户,这一切都是在用户/密码保护的WordPress网站上发生的,所以我真正想要发生的是WordPress网站从Icecast服务器请求文件,然后服务器将请求发送回WordPress网站上的custom.PHP,然后检查用户浏览器在我的WordPress网站中是否具有当前登录的会话。如果是这样,则将“ ok”标头发送回以完成循环。
我已经使标头正常工作,但是没有检查登录的wordpress会话的位。我相信这是因为其“会话”源自(单独的)服务器,而不是来自客户端的浏览器。
我正在为此打结!
Icecast安装点XML:
<mount-name>/stream99.aac</mount-name>
<authentication type="url">
<option name="listener_add" value="https://myserver.com/listener_joined.PHP"/>
<option name="username" value="user"/>
<option name="password" value="pass"/>
<option name="auth_header" value="icecast-auth-user: 1"/>
<option name="timelimit_header" value="icecast-auth-timelimit:"/>
<option name="headers" value="x-pragma,x-token"/>
<option name="header_prefix" value="ClientHeader."/>
</authentication>
</mount>
正在运行“ listener_joined.PHP”:
<?PHP
header('icecast-auth-user: 1');
?>
我尝试了许多在此处找到的wordpress'is_user_logged_in()的组合,但没有任何效果。我相信这是因为 Icecast服务器正在轮询信息(即未登录)。
希望有人可以提供帮助-非常感谢!
解决方法
改为使用querystring参数。
https://icecast.example.com/stream?sessionid=abcdef1234567890
这样,您就不必担心标题或跨域Cookie。