Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> session_abort(), session_reset(), Помогите понять смысл функций 
V
    Опции темы
linuxoid
  Дата 30.7.2015, 21:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 180
Регистрация: 17.4.2005

Репутация: нет
Всего: нет



Здравствуйте, уважаемые коллеги! Пытаюсь для себя понять, в чем заключается практический смысл (а твк же принцип работы) функций session_abort() и session_reset(), которые появились в PHP 5.6. 

В документации говорится, что session_abort() сбрасывает изменения в массиве сессии и заканчивает сессию. Т.е. по вызову этой функции сессия заканчивается без сохранения данных. Таким образом в данных сессии остаются оригинальные значения.

Каков практический смысл вышесказанного? Т.е. что значит, что значения сбрасываются и где именено? Что значит, что сессия заканчивается без сохранения данных и где остаются оригинальные значения? Для чего вообще может понадобиться что-то подобное?

Вот пример:

Код

<?php

session_start();

$_SESSION['test'] = 'foo';
$_SESSION['test'] = 'foo2';

var_dump(session_status()== PHP_SESSION_ACTIVE);

session_abort();

var_dump(session_status()== PHP_SESSION_NONE);
var_dump($_SESSION);


Вывод:
Цитата

boolean true

boolean true

array (size=1)
  'test' => string 'foo2' (length=4)


  
Судя по аутпуту, статус сессии поменялся на PHP_SESSION_NONE. $_SESSION переменная доступна и значение в ней 'foo2', а я думал будет сброс и значение будет предыдущее, т.е. 'foo'. Это первый вопрос. А второй - для чего это может быть практически применимо (т.е., что после PHP_SESSION_NONE, переменная $_SESSION всё еще содержит значения сессии).


Следующая функция session_reset() так же вызывает вопросы. Пример:
Код


<?php

session_start();

$_SESSION['test'] = 'foo';
$_SESSION['test'] = 'foo2';

var_dump(session_status()== PHP_SESSION_ACTIVE);

session_reset();

var_dump(session_status()== PHP_SESSION_ACTIVE);
var_dump($_SESSION);


Я думал, что в данном случае после вызова session_reset() будет доступна $_SESSION['test'], но вот какой получается вывод для данного примера:

Цитата

boolean true

boolean true

array (size=0)
  empty

  
Т.е. сессия хоть и активна, но данные полностью пропали. В то же время документация говорит, что session_reset() реинициализирует сессию используя оригинальные значения, которые хранились в хранилище сессии (session storage). Эта функция требует активную сессию и сбрасывает изменения в $_SESSION. 

Не понятно, что за хранилище и что за оригинальные значения. Я думал, что это файл сессии, а значения - это предыдущие установленные (как в моем примере выше), но аутпут говорит другое. Так же хотелось бы конкретный пример, для чего данная функция может быть применена. Спасибо.

P.S. У меня PHP 5.6.3.



Это сообщение отредактировал(а) linuxoid - 30.7.2015, 21:05
PM MAIL   Вверх
baldina
Дата 31.7.2015, 12:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 26
Всего: 101



Цитата(linuxoid @  30.7.2015,  21:02 Найти цитируемый пост)
удя по аутпуту, статус сессии поменялся на PHP_SESSION_NONE. $_SESSION переменная доступна и значение в ней 'foo2', а я думал будет сброс и значение будет предыдущее, т.е. 'foo'

откуда там будет 'foo' если вы строчкой ниже сами его переустановили на 'foo2'?
abort() должен завершать сессию без сохранения данных. сессия завершена. какие остались данные можно узнать только открыв сессию: содержимое $_SESSION при закрытой сессии может быть любым и к сессии не относится. 

Цитата(linuxoid @  30.7.2015,  21:02 Найти цитируемый пост)
Я думал, что в данном случае после вызова session_reset() будет доступна $_SESSION['test'], но вот какой получается вывод для данного примера:

reset() должен очищать $_SESSION и считывать туда заново сохраненные ранее данные из хранилища (файла). поэтому $_SESSION['test'] "может быть доступна" только если ранее сохранялось в сессии

linuxoid, манипуляции с $_SESSION не отличаются от работы с другими переменными. 
когда сессия стартует, $_SESSION заполняется значениями из хранилища
когда скрипт завершается, данные из $_SESSION записываются в хранилище
никакой дополнительной обработки, когда вы пишете/читаете $_SESSION, не производится
PM MAIL   Вверх
linuxoid
Дата 31.7.2015, 12:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 180
Регистрация: 17.4.2005

Репутация: нет
Всего: нет



"содержимое $_SESSION при закрытой сессии может быть любым и к сессии не относится.". Понял.
"никакой дополнительной обработки, когда вы пишете/читаете $_SESSION, не производится". Понял.

Спасибо! Разобрался. Я просто делал reset тут же, пока скрипт не завершился, поэтому он брал данные из пустого файла. Всё, что нужно было - дождаться завершения или использовать session_write_close() перед session_reset().

Это сообщение отредактировал(а) linuxoid - 31.7.2015, 12:54
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0613 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.