Каждый ли доступ к $ _SESSION немедленно связан с вводом-выводом в файловой системе? - PullRequest
6 голосов
/ 31 марта 2009

Каждый раз, когда я обращаюсь к данным в $ _SESSION, он немедленно обновляет файл сеанса на диске или только один раз, когда процесс останавливается? Или каждые n байтов данных меняются (сбрасываются)?

Этот вопрос не обязательно касается конкретного обработчика файловых сессий, но каждого обработчика. (Делает ли каждое касание в сеансе немедленный вызов ввода-вывода любого вида, кроме хранения нормальной переменной в памяти).

Ответы [ 3 ]

3 голосов
/ 31 марта 2009

Как писал Мэтт, по умолчанию он пишет в конце выполнения скрипта. Вы можете прочитать об этом здесь в session_write_close ()

Данные сеанса обычно сохраняются после ваш сценарий завершен без нужно вызвать session_write_close (), но так как данные сеанса заблокированы предотвратить одновременную запись только одного Скрипт может работать на сессии в любой время. При совместном использовании фреймов с сеансами вы испытаете загрузка кадров по одному из-за этого замок. Вы можете сократить время необходимо загрузить все кадры по окончание сеанса, как только все внесены изменения в переменные сеанса.

2 голосов
/ 31 марта 2009

Это пишет и конец процесса на моей установке. Я сделал новый _ сеанс_ write_method:

public function _session_write_method($id, $sess_data) {
    var_dump(file_put_contents('/var/www/public_html/testing.txt', serialize($sess_data)));
    return(true);
}

и затем:

$_SESSION['foo'] = 'bar';
while(true)

Я выполнил сценарий, подождал несколько секунд и затем запустил 'sudo kill' для идентификатора процесса. Он не записывал сериализованные данные в файл. Я снова запустил его без бесконечного цикла и получил: int (22) в самом низу страницы, и был успешно записан файл test.txt, содержащий: s: 14: "foo | s: 3:" bar ";" ;

0 голосов
/ 31 марта 2009

Зависит от обработчика. Вы можете написать свой собственный обработчик, чтобы убедиться, что это происходит только так часто, как вам нравится, если вы хотите быть абсолютно уверены в поведении. Для управления переменными сеанса используется 6 обратных вызовов. Тот, который называется «запись», не должен выполнять какой-либо реальный ввод-вывод, и запись файла сеанса может подождать, пока вызов не будет «закрыт». Это деталь реализации, которая, как я уже сказал, зависит от обработчика.

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