@4Geka
PHP

Не работают сессии php, в чем дело?

Вот файл с выбором города city.php:

<?   unset($_SESSION['locality']);
session_destroy();
?>
<div class="main-block">
	<div class="container">
		<div class="content-block row">
			<aside class="left-sidebar col-xs-3">
				<?php $this->getServices(); ?>
			</aside>
			<div class="main-column col-xs-6">
				<?
foreach($this->contentRows as $city){
	if(!empty($city->link)){
		$link = $city->id_record .'-'.$city->link;
	}
	else{
		$link = $city->id_record;
	};
	?>
<a href='/?city&title=<?=urlencode($city->title)?>'><?=$city->title;?></a><br>

<?
};
?>


А вот главный файл со стартом сессии, index.php:
<?php
	session_start();

    ini_set('session.gc_maxlifetime', 3600*24*30);
    ini_set('session.cookie_lifetime', 3600*24*30);

	if(!$_SESSION['locality'])
	{
		if (isset($_GET['title']))
			{
				$_SESSION['locality']=$_GET['title'];
		 }
    }
?>

Но после того как обновляю страницу, сессия сбрасывается (т.е попросту не сохраняется), в чем трабла?
  • Вопрос задан
  • 6837 просмотров
Решения вопроса 1
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
как у вас все работает? city.php инклудится в index?

ini_set('session.gc_maxlifetime', 3600*24*30);
    ini_set('session.cookie_lifetime', 3600*24*30);
    session_start();

Сначала настраиваем сессию, потом вызываем.

session_destroy(); убираете, зачем она там вообще? Если вы делаете инклуд, то вы сначала стартуете сессию, потом ее грохаете. Какой смысл, если unset($_SESSION['locality']); должно все что надо сделать.

Если перед session_start() будет что - либо выводиться(хтмл или ошибка) сессия стартовать не будет. То же касается и session_destroy();

Обычно если есть какие-либо ошибки их можно отследить в ерорлоге или включить вывод ошибок через настройку php.ini и понять какие проблемы возникли при создании сессии. В частности есть вариант что переполнен диск и сессии просто не создаются на диске.

Если это все у вас отдельные страницы(то есть есть еще страницы кроме index.php) во всех в начале должно быть session_start();, иначе сессии работать не будут. Эта директива создает связь куки в браузере и сессионной записи на сервере, без нее механизм сессий работать не будет, т.е. сессию нужно каждый раз "перестартовать".
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
orlov0562
@orlov0562 Куратор тега PHP
I'm cool!
unset($_SESSION['locality']);
session_destroy();
Ответ написан
safenoob
@safenoob
var_dump($_SESSION);
поставьте в разных местах и смотрите где она пропадает
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы