Safari 5.1 in 不允许 <video> 源检测 $_SESSION 变量

Posted

技术标签:

【中文标题】Safari 5.1 in 不允许 <video> 源检测 $_SESSION 变量【英文标题】:Safari 5.1 in doesn't allow <video> source to detect $_SESSION variables 【发布时间】:2011-11-21 11:30:15 【问题描述】:

我有一个 download.php 脚本,它检测用户是否使用 $_SESSION 变量登录,并向用户读出一个视频文件。如果我从 Safari 5.0.5 中的元素调用它,脚本会检测到会话变量并按预期工作。在 5.1 中,download.php 不会读取会话变量,并且它的行为就像用户没有登录一样。如果我直接从地址栏调用脚本,它就可以正常工作。如果我从我的 iPhone 打电话,它也会被检测到。有谁知道这是一个错误还是有解决方法?我将不得不重新编写很多内容来尝试不使用会话。谢谢。

这是一个故障排除脚本。这显示了正确的会话数据:

<?php
session_start();
?>
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        <title>Test</title> 
    </head>
    <body>
        <video   controls="true" autoplay="false" id="v">
            <source src="video.php" type="video/mp4" />
        </video>
        <?php
        echo "<pre>";
        var_dump($_SESSION);
        echo "</pre>";
        ?>
    </body>
</html>

每次我加载上述页面时都会写入“未检测到会话”,但使用 Safari 5.0.5 和 ios 检测到会话:

<?php
session_start();

// write local error log
function write_log($txt) 
    $myFile = 'error.log';
    $fh = fopen($myFile, 'a') or die("can't open file");
    fwrite($fh, "$txt\n");
    fclose($fh);


if ($_SESSION) 
    write_log(date('Y-m-d H:i:s'). ' Session Detected');
 else 
    write_log(date('Y-m-d H:i:s'). ' Session Not Detected');


?>

编辑:Safari Inspector 将调用 video.php 的状态显示为“待处理”,并且除了请求 url 之外没有任何标题。 修复了 session_start,但仍然可以正常工作。

编辑:好的,如果我读取 SERVER 变量,5.1 和 5.0.5 之间的区别在于 5.0.5 具有:HTTP_CONNECTION => 关闭,并且 HTTP_COOKIE 包含 PHPSESSID

编辑:我在 32 位模式下运行 Safari,它又可以工作了......

【问题讨论】:

您能否使用 Safari 开发者工具查看 Safari 在请求 video.php 时发送的 HTTP 标头?请求视频时是否发送 PHP 会话 cookie? 至于调试:您应该查看$_COOKIE 并将$_SERVER 数组转储到日志文件中。完全有可能在您的 Safari 版本中,一个插件 (Quicktime) 接管了下载视频源并且不共享浏览器 cookie 存储。 在session_start()之前,不能输出任何html代码。 【参考方案1】:

如果 cookie 没有自动传递给

<video ...>
    <source src="video.php?PHPSESSID=<?php echo session_id(); ?>" type="video/mp4" />
</video>

【讨论】:

以上是关于Safari 5.1 in 不允许 <video> 源检测 $_SESSION 变量的主要内容,如果未能解决你的问题,请参考以下文章

无法通过 Safari 5.1 网络播放音频

Laravel 5.1 - 仅 Safari 浏览器上的 iframe 的令牌不匹配问题

静音的自动播放视频在 Safari 11.0 中停止播放

Safari 5.1 基本身份验证注销问题

Safari 5.1 上的 VideoJS 进度事件始终为 0

iOS 5.1 和 Safari Mobile 限制