tosha_
Guest
Идентификатор сессии жив - все переменные потеряны...
Ситуация выглядит следующим образом:
Запрашиваю пароль, проверяю, стартую сессию, после чего постоянно рефрешу страницу (location.replace по таймауту) и показываю юзеру какую-то информацию (да хотябы идентификатор сессии для теста). Все это замечательно работает. Иногда даже долго, иногда нет. При очередном запросе оказывается, что хотя идентификатор сессии жив - ни одной переменной в ней нет... Все это имеет место на моем локальном апаче/пхп и у некоторых провайдеров. У некоторых других провайдеров все работает часами без всяких проблем. В момент глюка временный файл сессии становится либо абсолютно пустым (при работе через массив $_SESSION) либо напротив имен переменных вместо типов и значений стоит восклицательный знак (при работе "постаринке" через session_register()). Что бы это все значило? Или, если конкретней, я вижу два выхода:
1. Настроить как-то "более правильно" мои апач и пхп (если, конечно, дело в них) так чтобы все без проблем работало у меня (работает же у людей), после чего "во всеоружии" пообщаться на эту тему с провайдером у которого наблюдается подобный глюк.
2. Если проблема в скрипте - переписаиь его как-то так, чтобы работало везде и всегда, вопрос только как...
Вот такая беда, бьюсь уже второй день...
Тестовый скрипт:
Помогите, если кто в курсе...
Ситуация выглядит следующим образом:
Запрашиваю пароль, проверяю, стартую сессию, после чего постоянно рефрешу страницу (location.replace по таймауту) и показываю юзеру какую-то информацию (да хотябы идентификатор сессии для теста). Все это замечательно работает. Иногда даже долго, иногда нет. При очередном запросе оказывается, что хотя идентификатор сессии жив - ни одной переменной в ней нет... Все это имеет место на моем локальном апаче/пхп и у некоторых провайдеров. У некоторых других провайдеров все работает часами без всяких проблем. В момент глюка временный файл сессии становится либо абсолютно пустым (при работе через массив $_SESSION) либо напротив имен переменных вместо типов и значений стоит восклицательный знак (при работе "постаринке" через session_register()). Что бы это все значило? Или, если конкретней, я вижу два выхода:
1. Настроить как-то "более правильно" мои апач и пхп (если, конечно, дело в них) так чтобы все без проблем работало у меня (работает же у людей), после чего "во всеоружии" пообщаться на эту тему с провайдером у которого наблюдается подобный глюк.
2. Если проблема в скрипте - переписаиь его как-то так, чтобы работало везде и всегда, вопрос только как...
Вот такая беда, бьюсь уже второй день...
Тестовый скрипт:
PHP:
<?php
include ('inc/i_ctest.php');
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Session-test</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
</head>
<body>
<?php
if (!isset($ct)){
echo "<form action=cid_test.php method=post>Выберите канал:<select name=chid>";
echo "<option value=1>xxx</option>";
echo "</select>";
echo "<br>Пароль канала:<input type=password name=pass>";
echo "<br><input type=submit value=ok></form>";
} else {
echo $chid."<br>".$C_ID."<br>".$ct;
?>
<script>
function request(){
window.location.replace('cid_test.php');
}
setTimeout('request()',500);
</script>
<?php
}
?>
</body>
</html>
А это то, что инклудится в начале:
<?php
unset($ct);
if (isset($_POST['chid']) and @$_POST['pass']!='') {
$chid=intval($_POST['chid']);
$pass=$_POST['pass'];
if (md5('xxx')===md5($pass)) {
session_name("C_ID");
session_start();
$ct=time()-30;
$_SESSION['ct']=$ct;
$_SESSION['chid']=$chid;
//session_register("ct","chid");
//$ct=time()-30;
$is_start=true;
}
} elseif (isset($C_ID)) {
session_name("C_ID");
session_start();
//session_register("ct","chid");
$ct=$_SESSION['ct'];
$chid=$_SESSION['chid'];
} else {
echo "СТАРТ.";
}
?>