У меня есть ситуация, когда я начал сеанс с:
session_id( $consistent_session_name_for_user ); session_start(); $_SESSION['key'] = $value;
но потом я решил, что на самом деле я не хочу «совершать» (писать) этот сеанс. PHP, похоже, не имеет какой-либо функции session_abort_write()
. Я не хочу уничтожать переменные сеанса из предыдущих сценариев, поэтому я не могу использовать session_destroy()
Я попробовал session_id("")
, но этот вызов завершился неудачно. Я мог бы «перенаправить» сеанс, чтобы он записывал на другой сеанс, например session_id("trash")
, но это привело бы к тому, что множество подключений PHP (Apache) попытались бы записать в тот же «файл» сеанса, который я хочу избежать.
Я очень упрощаю проблему здесь, мы фактически сохраняем сессии в Memcached, и это сложная база кода. Поэтому я не хочу постоянно отправлять лишние сеансы «мусора» на сервер Memcached.
С PHP.net,
session_regenerate_id заменит текущий идентификатор сеанса на новый и сохранит текущую информацию сеанса.
session_unset освободит все зарегистрированные переменные
session_unregister (string $ name) отменит регистрацию определенной переменной
Я не определил, действительно ли этот метод запрещает запись сеанса в хранилище сеансов, но вот решение, которое я, наконец, использовал:
session_id( 'trash' ); // or call session_regenerate_id() as someone else suggested $_SESSION = array(); // clear the session variables for 'trash'.
Я надеюсь, что это приведет к тому, что ничего не будет написано, но я предполагаю, что он все равно напишет пустой файл, потому что PHP не может знать, что sess_trash еще не существует.
Если вы хотите полностью избежать записи сеанса, вам придется использовать собственный обработчик сеанса в PHP и установить глобальный флаг, чтобы предотвратить запись сеанса.
Существует session_write_close()
. Он выгружает массив сеансов на хранение и затем «закрывает» его – $ _SESSION будет по-прежнему доступным и доступным для чтения / записи, но любые изменения больше не будут сохранены, если вы снова не выполните session_start()
позже в скрипте.
Вероятно, вы можете использовать что-то с session_set_save_handler, чтобы включить фиктивные функции для обработки сеанса.
<?php function fakeIt() { return true; } session_set_save_handler("fakeIt", "fakeIt", "fakeIt", "fakeIt", "fakeIt", "fakeIt");