2012-03-02 4 views
5

Что делает session_destroy() функция делаю? Чтобы удалить все переменные сеанса в глобальном массиве $ _SESSION, я должен использовать session_unset(). Чтобы удалить сессию из браузера клиента (удалить идентификатор сессии и имя), я должен неустановленные печенья:Зачем нужна session_ destroy()?

unset($_COOKIES[session_id()]); 
unset($_COOKIES[session_name()]); 

Почему session_destroy() функция необходима?

+0

http://us.php.net/manual/en/function.session-destroy.php –

+0

Большое спасибо, я читал это несколько раз, но не могу понять, что он делает. Почему это действительно не разрушает сеанс. Чтобы уничтожить сеанс, я должен использовать еще два шага. Но на самом деле session_destroy() должен делать эти шаги для меня. – Green

+2

Если ответ «Еще один код *» предоставил вам необходимую информацию (я не вижу, как это может быть), согласились бы вы его принять? Обычно это делается здесь: p – RobinJ

ответ

11

session_destroy() завершает весь сеанс, то есть он будет удален из хранилища сеансов PHP и больше не может использоваться повторно. Если вы отключили только переменные сеанса и файлы cookie, сеанс все равно будет активным на стороне сервера и может быть переработан, если некоторые переменные сеанса снова установлены, а cookie с исходным идентификатором сеанса снова отправляется клиенту.

Иными словами, сеанс в основном состоит из секретного идентификатора, хранящегося где-то на веб-сервере, вместе с переменными сеанса, зарегистрированными на этом сеансе. Идентификатор сеанса отправляется клиенту (обычно в виде файла cookie), поэтому клиент может быть идентифицирован как «владелец» сеанса для последующих запросов. Предполагая, что сессия уже была создана и имеет переменные, зарегистрированные в ней, вот обзор того, что делают функции:

  • session_start() импортирует все переменные сессии, относящиеся к идентификатору сеанса, который клиент отправляется из реестра сессии в $_SESSION массив
  • session_unset() или позвонив по unset()$_SESSION переменные будут удалены все переменные, зарегистрированные на текущей сессии, но не ясно сессия сама
  • Отключение сеанса печенья клиента будет сигнализировать кли что сеанс завершен, но этот не будет удалить сеанс из реестра сеанса на сервере либо
  • session_destroy() - единственная функция, которая фактически очистит сеанс из реестра сеансов, тем самым буквально «разрушая» сеанс

Хотя session_destroy() будет отменить все переменные сессии, не будет ясно $_SESSION массива в скрипте, который выполняется в данный момент, так что это еще хорошая идея, чтобы сбросить переменные сессии для предотвращения ошибок и проблем безопасности.

На соответствующую записку, РНР руководство рекомендует не использовать session_unset() а неустановленные ключи от $_SESSION:

Если $_SESSION (или $HTTP_SESSION_VARS для PHP 4.0.6 или меньше) используется, используйте unset() для отмените регистрацию переменной сеанса, т.е. unset($_SESSION['varname']);.

+0

'Использовать session_unset() для более старого устаревшего кода, который не использует $ _SESSION.' Чтобы освободить все SESSION VARIABLES, используйте: ' $ _SESSION = array() ' – MTVS