2015-12-04 2 views
3

Я работаю на довольно сложном сайте PHP, хранящем много данных в $ _SESSION. Стандартный запрос включает вызов множества функций, которые обновляют $ _SESSION. Исключения могут быть выбрасываться в любой точке вычисления, оставляя данные в $ _SESSION непоследовательными.Как избежать сохранения сеанса PHP на диск при определенных обстоятельствах

Я должен избегать несогласованности, данные должны быть сохранены, только если вычисление достигнет конца. AFAIK PHP пишет сеанс в файл в конце скрипта, поэтому, если я могу помешать ему это сделать, я должен поддерживать согласованность и находить $ _SESSION именно так, как это было до разбитого вызова в следующий раз, когда я его назову, правильно?

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

Решение проблемы путем сериализации копии всех данных в начале каждого вызова, чтобы иметь возможность в конечном итоге восстановить его, не является опцией из-за характеристик (данных достаточно много). Кроме того, у меня нет большого контроля над всей системой, поэтому я не могу выполнять «важный» рефакторинг кода.

+4

[session_abort()] (http://php.net/manual/en/function.session-abort.php) или [session_reset()] (http://php.net/manual/en/function. session-reset.php), если вы находитесь на> = 5.6.0 –

ответ

0

Как сказал @Mark Бейкер в комментарии, ответ был прост:

session_abort() или session_reset(), если вы находитесь на> = 5.6.0

Плохие результаты Google для запроса: «избегайте сохранения сессионного диска PHP», и этот вопрос SO: How to prevent a started PHP session from writing? вводит меня в заблуждение, полагая, что решение было намного сложнее.

Смежные вопросы