Хранилище сессий PHP - PullRequest
       14

Хранилище сессий PHP

2 голосов
/ 07 октября 2009

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

Как я понимаю, когда PHP сохраняет данные сеанса в БД, выглядит так:

Если я определю некоторые переменные сеанса, а затем выведу некоторый текст в браузер пользователя, я считаю, что данные сеанса не сохраняются в БД до тех пор, пока текст не выведен. Пожалуйста, посмотрите на этот бит кода:

$_SESSION['username'] = $username;


//check if session variable set
if($_SESSION['username'] != $username)
{
die('error...');
}

В коде оператор if возвращает false, поэтому die() никогда не встречается. Также PHP не записывает данные сеанса в БД до тех пор, пока после оператора if. Чего я не понимаю, так это если данные сеанса еще не записаны в БД, как PHP сравнивает $_SESSION['username'] с $username? $_SESSION['username'] сохраняется в памяти сервера до конца сценария, когда данные сеанса записываются в БД?

Спасибо за ваше время.

Ответы [ 3 ]

2 голосов
/ 07 октября 2009

_SESSION - это «обычный» массив, например $a = array() is.
«Волшебство» происходит только тогда, когда вызывается session_start (), а ранее сохраненные данные считываются (обратно) в _SESSION и когда механизм сеанса останавливается (когда экземпляр php выключается или когда вызывается session_write_close ()), а данные в _SESSION сериализовано и хранится.

2 голосов
/ 07 октября 2009

Точно верно.

Данные сеанса хранятся в памяти до конца запроса (или до вызова session_write_close ()). Содержимое $ _SESSION затем записывается в настроенный механизм хранения.

При следующем запросе, когда происходит session_start (), данные загружаются из хранилища в $ _SESSION, где они остаются, до тех пор, пока запрос не будет завершен.

В противном случае PHP будет читать / записывать в базу данных (в вашем случае) каждый раз, когда вы касаетесь чего-либо в сеансе.

1 голос
/ 07 октября 2009

Вы можете использовать session_write_close, чтобы заставить php писать сеанс.

Смотри: http://us2.php.net/manual/en/function.session-write-close.php

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...