Safari 5.1 в не позволяет <video>источнику обнаруживать переменные $ _SESSION - PullRequest
2 голосов
/ 21 сентября 2011

У меня есть скрипт download.php, который определяет, вошел ли пользователь в систему с переменной $ _SESSION, и считывает ли пользователь видеофайл.Если я вызываю это из элемента в Safari 5.0.5, сценарий обнаруживает переменную сеанса и работает как положено.В 5.1 переменные сеанса НЕ читаются файлом download.php, и он действует так, как если бы пользователь не вошел в систему. Если я вызываю скрипт непосредственно из адресной строки, он работает нормально.Если я звоню с моего iPhone, он также обнаруживается.Кто-нибудь знает, если это ошибка или есть обходной путь?Я должен был бы много переписать, чтобы попытаться не использовать сессии.Спасибо.

Вот скрипт устранения неполадок.Это показывает правильные данные сеанса:

<code><?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 width="640" height="480" controls="true" autoplay="false" id="v">
            <source src="video.php" type="video/mp4" />
        </video>
        <?php
        echo "<pre>";
        var_dump($_SESSION);
        echo "
";?>

Это пишет 'Session Not Detected' каждый раз, когда я загружаю вышеуказанную страницу, но сеансобнаруживается в 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 => close, а HTTP_COOKIE содержит PHPSESSID

РЕДАКТИРОВАТЬ: я запустил Safari в 32-битном режиме, и он снова заработал ...

1 Ответ

0 голосов
/ 08 апреля 2012

Если файлы cookie не передаются автоматически в сценарий, вызываемый элементом , вы можете просто передать PHPSESSID в качестве параметра GET, поэтому на странице, где внедрено видео, вы добавляете что-то вроде:

<video ...>
    <source src="video.php?PHPSESSID=<?php echo session_id(); ?>" type="video/mp4" />
</video>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...