我的网站上有一个仅限会员的区域,用户可以在其中登录和查看 Windows Media 流媒体内容。
我创建了一个 PHP 脚本来提供 ASX 文件,但是我无法使用会话信息对此进行验证。我认为这是因为 WMP 发出请求而不是 php 页面。
任何人都可以提出一种保护 ASX 文件的优雅方法吗?
你可以试试这个:
//$user->isAuthenticated is only for ilustration, use whatever method you
//use to check if the user is authenticated
if($user->isAuthenticated()) {
$asx = file_get_contents("/path/to/my/file.asx");
header("Content-type: video/x-ms-asf");
echo $asx;
} else {
//Tell the user that he can't view this asx
}
我要做的是将 PHP 会话 ID 合并到 .asx 请求中。通常,此标识符存储在 cookie 中,并在每个页面请求时传递给 PHP。在这种情况下,WMP 不会发送 cookie,因此您无法知道请求是否经过身份验证。
当您输出 ASX 文件的下载链接时,将会话标识符添加为 GET 变量:
$download_link = "http://myserver.com/download_asx_file.php?"
$download_link .= "f=$file_id&";
$download_link .= htmlspecialchars(SID);
现在,当您session_start()
在顶部调用时,download_asx_file.php
它应该会正确找到并加载您的会话,并允许您正常进行身份验证。
注意:SID 常量被评估为PHPSESSID=12345678
(或任何用户的会话恰好是)