[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Сессия умирает?
soniclord
Здравствуйте, уважаемые Гуру!

Проблема вот в чем:

имеется сессия $_SESSION['user_data'] - браузер говорит что она живет пока браузер не закрываешь.
имеется cookie, срок которому на жизнь отведен в месяц. Если закрыть браузер и открыть заново - то куки нормально передают данные новой сессии и все нормально.

есть условие:
if((!isset($_SESSION['user_data']))&& (isset($_COOKIE['hash']))){ 
тут мы проверяем хеш и присваиваем сессии
}


Но когда я ухожу спать (~ 6 часов) не подходжу к браузеру, у меня начинает твориться странное - сессия ['user_data'] вроде как жива, однако она пуста:
Array ( [user_data] =>)


Пытаюсь вытащить данные с куки, там вообще какая то белиберда творится.

p.s. у меня еще стоит cnstat - думал может он сессию перехватывает, однако просмотрев все его скрипты, не обнаружил $_SESSION['user_data']

Вопрос 1:
Так почему же сессия умирает до закрытия браузера?

Вопрос 2:
Если сессия умерла, почему данные с куки не заполняют сессию?
soniclord
правильно ли я понимаю - чтобы сохранить данные пользователя на месяц, мне и сессию ставить на месяц? а зачем тогда куки нужны?
Hello
Цитата (soniclord @ 21.11.2012 - 03:26)
Вопрос 1:
Так почему же сессия умирает до закрытия браузера?

http://www.php.net/manual/en/session.confi....gc-maxlifetime
На стороне клиента "сессия" это только кука с ID
Все данные хранятся на сервере, и удаляются раньше чем браузер удаляет куку

Цитата (soniclord @ 21.11.2012 - 03:26)
Вопрос 2:
Если сессия умерла, почему данные с куки не заполняют сессию?

Клиент не имеет доступа к данным сессии

_____________
VPS от 5$, первые 2 месяца - бесплатно.
inpost
23-25 минут живёт сессия вне активности клиента. Если не установлен другой параметр.
Поэтому через это время она очищается. Откуда взялись данные другие - ты заново создал или прописал их. Бывает такое. Особенно когда пишешь так:
if($_SESSION['user_data'] = '') , то есть вместо == написал =. Ну или в другом месте по коду.
Последний вопрос: Куки = куки. Сессия = сессия. Куки != Сессия.

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
soniclord
так как правильней сделать так: данные пользователя сохраняются в течении месяца. как, допустим у гугла?
inpost
php.ini => session.gc_maxlifetime
А кто тебе сказал, что у гугла живёт сессия пол года?
Если я напишу так:
if(!isset($_SESSION['login']) && isset($_COOKIE['login'])) {
$_SESSION['login'] = $_COOKIE['login'];
}

Твоё представление об сессиях и куках рушится?! :) Это называется автоавторизация, то есть галочка: "запомнить меня".

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
inpost
П.С. правда там всё немного сложнее. Необходимо хранить какой-то идентификатор, потом по нему делать запрос к БД и доставать данные пользователя и его авторизировать автоматически, при первом заходе на сайте после смерти сессии. Идентификатор хранить уже в куках.

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
soniclord
в данный момент у меня в скриптах выполняется такое условие:
if((!isset($_SESSION['user_data']))&& (isset($_COOKIE['hash']))){ 
include './modules/register/functions.php';
$ret=getLogin($_COOKIE['hash']);
if (!empty($ret)){
$_SESSION['user_data'] = getLogin($_COOKIE['hash']);
} else {
setcookie('hash', '');
}

}

в функции getLogin - проверяется в БД - есть ли хеш такой и если есть, то сессии присваиваются все данные данного пользователя.

Но, кажется, я понял в чем проблема - если заходить с разных компьютеров под одним логином, то хеш присваивается с последнего заходившего куки, и, все предыдущие куки теряют смысл.

p.s. функции авторизации взяты с уроков от IRBIS
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.