Forum Webscript.Ru
Программирование => PHP => Тема начата: storm2k от 05 Февраля 2004, 02:10:10
-
Значит я тут немного запутался с сесиями. Сессия храниться до тех пор пока открыто окно браузера???
Просто тут столкнулся со следующей проблемой, есть некий скрипт авторизации пользователей.
В общем юзеры проходят регистрацию, все введенные данные хрянтся в неком массиве, который в свою очередь храниться в сессии. Но проблема в том, что мне никак не обраться к сессии после закрытия окна браузера. Т.е. допусти что при регистрации у человека виснит комп, он его перезагружает и ему снова приходиться вводить все данные сначала. Так и должно быть, или у меня ркуи кривые... Можно конечно все еще хранить и в кукишах...
Подскажите где можно об этом поподробнее почитать... или просто так на пальцах расскажите...
-
Сессия храниться до тех пор пока открыто окно браузера???
совершенно верно
я только не понял, зачем хранить данные в сессии, вместо того, чтобы их записать в базу, и почему при регистрации у твоих юзеров компы зависают. Ты им вирусы рассылапешь что ли?
-
[OFF]Меня за**ало что ты мои сообщения трешь напостой без пояснений. Я ведь дело говорю! И про кукисы, и про сессии, и даже про хранение данных на форуме (тема "Проблемы с написанием собственного форума"). ОБЪЯСНИ![/OFF]
-
Я ведь дело говорю!
Ты себе льстишь.
Когда напишешь по делу, я не буду стирать.
Подходи к написанию ответов более вдумчиво.
Можешь сначала мне приватом писать. Лично тебе я объясню, в чем ты неправ. а в чужой теме я этого делать не буду - флейм разводить. Мне проще стереть.
-
RomikChef:
Сессия храниться до тех пор пока открыто окно браузера???
совершенно верно
Кстати по-моему совершенно необязательно :) Сессионные данные на сервере могут и дольше храниться :) и все зависит от значения session.gc_maxlifetime в php.ini. Просто обычно там же пишут session.cookie_lifetime = 0 и кука сессионная ставится без указания времени жизни и живет только до тех пор пока открыто текущее окно браузера. Т.е. первый вызов session_start(); или попытка что-нибудь записать в сессию инициирует выдачу заголовка типа
Set-Cookie: PHPSESSID=b9118d27f8abb0337a87b447daa2cc12; path=/
(где PHPSESSID это значение по умолчанию session.name в php.ini)
и первую и вторую чать этого выражения легко определить в скрипте. Например session_name(); вернет строку "PHPSESSID", а session_id(); вернет строку "b9118d27f8abb0337a87b447daa2cc12".
Ну и поскольку при выдаче подряд двух заголовков Set-Cookie более высокий приоритет имеет переданный последним, никто не мешает нам продлить время жизни куки даже не трогая ini_set :)
Например на 10 минут:
session_start();
header("Set-Cookie: ".session_name()."=".session_id()."; expires=".gmdate ("l, d-M-y H:i:s", (600+time()))." GMT; path=/;");
При таком раскладе сессионная кука будет передаваться на сервер после закрытия и открытия заново браузера и если сессионные данные на сервере живы (а живут они обычно вроде бы 24 минуты по умолчанию ?), то все получится :)
-
Polar, а теперь скажи мне, что будет, если я живу , скажем, в казани, а сервер, в москве?
и кука экспайрится, к примеру, в 12-00, а у меня уже 12-30, и при этом я тольо зашел на сайт?
скажи мне, так же, сработает ли этот механизм, если куки отключены?
понимаешь и, друг мой, механизм сессий не дураки писали.
и почему-то время жизни куки сессионной поставлено в ноль.
и люди, которые пишут реальные программы, а не фантазии, так его и оставляют.
Вот и тебе я советую, ра ты не понимаешь, что для чего сделано, не изобразать из себя изобретателя вечного дивигателя.
янадеюсь, вопрос снят?
к сожалению, не ты один такой фантазер, поэтому приходится разжевывать.
не всем достуно понятие сеанса, увы
-
RomikChef :)
Вообще конечно все это звучит по меньшей мере смешно и крайне неубедительно, но спорить не буду :-)
Просто советую почитать спецификацию на заголовок Set-Cookie, обратить внимание на "GMT" в той строчке кода и проверить как это работает в реальной жизни :-) А если куки отключены никто не мешает это проверять и передавать идентификатор сессии гетом :-)
И хотя я тоже не вижу зачем это может пригодиться, но человек спросил, а отвечать однозначно и неверно-то зачем? :)
PS Если на клиенте часы стоят неправильно, то конечно может не сработать, но и с неправильно установленными часами можно бороться используюя комбинацию яваскрипта и пхп :-)
PPS Иногда заказчики "реальных программ" хотят очень странных вещей, а наше дело не рассуждать о невозможности, а искать пути разрешения :-)
-
про GMT протупил, действительно.
имел в виду сбитое время.
и, в первую очередь - неуниверсальность подхода.
механизм сессий гарантирует некий функционал. если соблюдать ограничения.
про яваскрипт - это уже детский лепет.
никто не мешает это проверять и передавать идентификатор сессии гетом
замечательно.
только ты совсем забыл о чем речь.
я тебе напомню.
Polar:
При таком раскладе сессионная кука будет передаваться на сервер после закрытия и открытия заново браузера и если сессионные данные на сервере живы (а живут они обычно вроде бы 24 минуты по умолчанию ?), то все получится :)
без кук не получится. мимо кассы, товарищ.
Polar:
отвечать однозначно и неверно-то зачем?
чтобы человек не пповторял твою ошибку, и правильно понимал смысл сеанса. закрыл браузер? СЧИТАЙ что данные в сессии пропали.
я ответил однозначно и верно.
СЕАНС работы с сайтом - это пока ты с ним работаешь.
Закрыл окно - кончился сеанс.Неважно, сам закрыл или комп завис.
Мне жаль тех, кто не понимает этой простой вещи и тужится растопырить сессии в несвойственную им позу вместо того, чтобы применять каждый механизм на своем месте.
если
Polar:
заказчики хотят
помнить юзера между сеансами, то использовать механизмы, придуманные для этого - куки илли пароль. А не изобретать из сессий урода.
Резюме.
Ответил я не истину, но правильно и однозначно.
Именно однозначно.
А вот в твоем случае однозначности как раз и нет.
А дурной заказчик никак не может быть оправданием дурака-девелопера, мой друг.
-
да :) точно - насчет гета это и я ступил :-)
но все равно большинство вещей пишутся под включенные куки :-)
Насчет лепета, явасрипта и неправильных часов на клиенте есть древний способ - в заголовке html кода прямо на первой странице пишем например
\');
//-->
в clienttime.php убираем три последних цифры у $_GET["t"], сравниваем полученную цифру с time() на сервере и записываем разницу в сессии. Ну а потом зная эту разницу легко поставить куку на точно заданное время именно по часам на клиентской машине.
Кроме того :-) не нам судить о целях и "правильности" :) Вариантов в жизни бывает очень много и "правил" на все варианты не напасешся, а ответ "нельзя" это совсем не то, что "можно, но не стоит" :)
-
и, все-таки, для понимания самого понятия сессии, для того, чтобы не было проблем с их работой, лучше считать, что данные пропали. Есть окно - сеанс. Нет окна - сеанс вышел.
механизм сессий и сам по себе не фонтан, не надо его делать еще более громоздким и неуправляемым.
Polar:
не нам судить
не записывай меня в свою компанию :-)
я достаточно разбираюсь в пхп, в людях и в вопросах на форумах, чтобы судить по вопросу о том, что в нем не написано :-)
-
Вот :-) Теперь совершенно другое дело и совершенно согласен :-)
И не буду записывать :-)
PS Хотя это скорее всего пройдет со временем :-) Я тоже лет 5-6 назад считал что "достаточно разбираюсь" во многих вещах, но надеюсь уже переболел :-)
И все :-) Не бейте сильно - флудить завязал :-)
-
у меня уже не пройдет.
тысяч 20 ответов на форумах позволяют сделать некоторые статистические выводы :-)