Идентификатор сессии жив - все переменные потеряны...

tosha_

Guest
Идентификатор сессии жив - все переменные потеряны...

Ситуация выглядит следующим образом:
Запрашиваю пароль, проверяю, стартую сессию, после чего постоянно рефрешу страницу (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 "СТАРТ.";
}
?>
Помогите, если кто в курсе...
 

kruglov

Новичок
По умолчанию сессии живут 24 минуты (1440 секунд).

session.gc_maxlifetime

Ищите в настройках.
 

tosha_

Guest
Сессии живут 24 минуты с последнего к ним обращения, а я обращаюсь постоянно - это раз. Вылетает как правило значительно быстрее - это два... Да и временный файл сессии не удаляется как было бы по окончании "срока жизни" а просто становится каким-то кривым...
 

Z.O.S.

Новичок
а может и удаляется, но просто при очередном рефреше создается вновь?
 

Фанат

oncle terrible
Команда форума
в этой каше никто не будет разбираться.
перепишите всё под $_SESSION и приходите снова
 

tosha_

Guest
Какая разница, как там этот механизм работает, модифицируется временный файл каждый раз или каждый раз удаляется и по новой создается - факт в том, что в определенный момент он дает сбой (кстати, если верить виндам, файл не удаляется и создается снова, а изменяется). И вопрс состоит в том, как это все поправить...

-~{}~ 31.08.05 13:33:

А там и так все под $_SESSION - если Вы заметили, строки session_register - закомментированы. А что касается каши - Вы можете подобный пример расписать значительно короче?
 

SiMM

Новичок
Вообще-то код выкладывать надо форматированным и в тэгах &#91;PHP]код&#91;/PHP]
А по коду - действительно, каша - совершенно непонятно, на кой нужна ветка elseif (isset($C_ID))
 

Фанат

oncle terrible
Команда форума
SiMM, проблема, действительно, не в коде.

-~{}~ 31.08.05 13:53:

хотя, конечно чтобы сократить количество сущностей, все эти переделки имени сессии, ифы - желательно убрать.
Хотя, конечно, скорее всего, дело в другом.

tosha_
попробуй задать отдельный каталог для сессий
 

tosha_

Guest
Автор оригинала: SiMM
Вообще-то код выкладывать надо форматированным и в тэгах &#91;PHP]код&#91;/PHP]
А по коду - действительно, каша - совершенно непонятно, на кой нужна ветка elseif (isset($C_ID))
Хм, у меня в этих тэгах текст вообще одной строкой получился... Спасибо Фанату - он все как надо доставил...
По поводу ветки elseif - она нужна для того чтобы при начальной авторизации и при последующих рефрешах выполнялись разные действия. Хотя мне и интересно читать подобные комментарии к коду, я хочу услышать прежде всего ответ на заданный вопрос, и в подобном свете хочется задать встречный вопрос - при чем здесь эта ветка? И в правилах форума было что-то насчет - "не знаешь ответа на вопрос - незачем постить в тему"...

-~{}~ 31.08.05 13:58:

у меня и задан отдельный каталог...
а у провайдеров, и у тех где работает и у тех где глючит - каталог стандартный - /tmp, так что видимо дело не в нем...
 
Сверху