![]() |
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]() ![]() ![]() |
|
linuxoid |
|
||||||||
Бывалый ![]() Профиль Группа: Участник Сообщений: 180 Регистрация: 17.4.2005 Репутация: нет Всего: нет |
Здравствуйте, уважаемые коллеги! Пытаюсь для себя понять, в чем заключается практический смысл (а твк же принцип работы) функций session_abort() и session_reset(), которые появились в PHP 5.6.
В документации говорится, что session_abort() сбрасывает изменения в массиве сессии и заканчивает сессию. Т.е. по вызову этой функции сессия заканчивается без сохранения данных. Таким образом в данных сессии остаются оригинальные значения. Каков практический смысл вышесказанного? Т.е. что значит, что значения сбрасываются и где именено? Что значит, что сессия заканчивается без сохранения данных и где остаются оригинальные значения? Для чего вообще может понадобиться что-то подобное? Вот пример:
Вывод:
Судя по аутпуту, статус сессии поменялся на PHP_SESSION_NONE. $_SESSION переменная доступна и значение в ней 'foo2', а я думал будет сброс и значение будет предыдущее, т.е. 'foo'. Это первый вопрос. А второй - для чего это может быть практически применимо (т.е., что после PHP_SESSION_NONE, переменная $_SESSION всё еще содержит значения сессии). Следующая функция session_reset() так же вызывает вопросы. Пример:
Я думал, что в данном случае после вызова session_reset() будет доступна $_SESSION['test'], но вот какой получается вывод для данного примера:
Т.е. сессия хоть и активна, но данные полностью пропали. В то же время документация говорит, что session_reset() реинициализирует сессию используя оригинальные значения, которые хранились в хранилище сессии (session storage). Эта функция требует активную сессию и сбрасывает изменения в $_SESSION. Не понятно, что за хранилище и что за оригинальные значения. Я думал, что это файл сессии, а значения - это предыдущие установленные (как в моем примере выше), но аутпут говорит другое. Так же хотелось бы конкретный пример, для чего данная функция может быть применена. Спасибо. P.S. У меня PHP 5.6.3. Это сообщение отредактировал(а) linuxoid - 30.7.2015, 21:05 |
||||||||
|
|||||||||
baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 26 Всего: 101 |
откуда там будет 'foo' если вы строчкой ниже сами его переустановили на 'foo2'? abort() должен завершать сессию без сохранения данных. сессия завершена. какие остались данные можно узнать только открыв сессию: содержимое $_SESSION при закрытой сессии может быть любым и к сессии не относится.
reset() должен очищать $_SESSION и считывать туда заново сохраненные ранее данные из хранилища (файла). поэтому $_SESSION['test'] "может быть доступна" только если ранее сохранялось в сессии linuxoid, манипуляции с $_SESSION не отличаются от работы с другими переменными. когда сессия стартует, $_SESSION заполняется значениями из хранилища когда скрипт завершается, данные из $_SESSION записываются в хранилище никакой дополнительной обработки, когда вы пишете/читаете $_SESSION, не производится |
|||
|
||||
linuxoid |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 180 Регистрация: 17.4.2005 Репутация: нет Всего: нет |
"содержимое $_SESSION при закрытой сессии может быть любым и к сессии не относится.". Понял.
"никакой дополнительной обработки, когда вы пишете/читаете $_SESSION, не производится". Понял. Спасибо! Разобрался. Я просто делал reset тут же, пока скрипт не завершился, поэтому он брал данные из пустого файла. Всё, что нужно было - дождаться завершения или использовать session_write_close() перед session_reset(). Это сообщение отредактировал(а) linuxoid - 31.7.2015, 12:54 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "PHP" | |
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |