Intereting Posts
Как вызвать файл ASP.NET .dll из PHP-скрипта? Как создать атаку SQL-инъекций с помощью Shift-JIS и CP932? Как проверить cookie с другого сайта в php и не разрешать доступ к mywebsite? Скрыть заголовки подкатегорий на странице с одной родительской подкатегорией WooCommerce Поиск многомерного массива для значения и возврат нового массива Xdebug успешно подключается к клиентам DBGP, но не останавливается на контрольных точках Как извлечь текст из текстового файла .doc, docx, .xlsx, .pptx php утвердить идентификацию личности с помощью системы печати пальцев в php & mysql Отсутствуют данные по углеродным данным Laravel PHP curl_getinfo ($ ch, CURLINFO_CONTENT_TYPE) не возвращает кодировку как поддерживать UTF8 (японский, арабский, испанский, …) URL в PHP PHP 5.4 – «закрытие $ этой поддержки» Как результаты смешиваются между двумя таблицами при использовании UNION Обработка загружаемых загрузок plupload на стороне сервера Symfony 3.1 и OneUpUploaderBundle + FineUploader = UploadListener не вызывается

Как предотвратить запуск PHP-сессии?

У меня есть ситуация, когда я начал сеанс с:

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");