У меня есть скрипт 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-битном режиме, и он снова заработал ...