Как отключить cookie сеанса PHP?

Я пишу PHP-код, где я хочу сам передать идентификатор сеанса, используя POST. Я не хочу, чтобы cookie хранил сеанс, так как он должен потеряться, когда пользователь выходит из цикла POST.

PHP автоматически устанавливает cookie, где он доступен. Я узнал, что можно изменить это поведение, установив session.use_cookies на 0 в php.ini . К сожалению, у меня нет доступа к этому файлу, и я также не хочу нарушать поведение других скриптов, работающих на одном сервере.

Есть ли способ отключить или аннулировать cookie сессии внутри PHP-скрипта?

EDIT: поскольку предлагаемые решения не работают для меня, я использовал $ _SESSION = array () в позициях в коде, где я обнаружил, что сеанс должен быть недействительным.

err его можно переопределить по умолчанию настройки вашего хоста, создав свой собственный .htaccess файл, и вот отличный учебник, если вы не тронули это еще http://www.askapache.com/htaccess/apache-htaccess.html

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

 SetEnv session.use_cookies='0'; 

Используйте ini_set () :

 ini_set('session.use_cookies', '0'); 

Или в файле php.ini:

 session.use_cookies = 0 

Вы также можете установить эту настройку в .htaccess, чтобы она применима ко всем сценариям, в противном случае вам нужно обеспечить, чтобы код вызывался при каждом запросе.

Например.

php_value session.use_cookies 0

Если вам просто нужно убрать сеанс в определенный момент времени, используйте session_destroy (). Если вы хотите полностью завершить сеанс, вот фрагмент копий / вставленный прямо из документации:

 // Initialize the session. // If you are using session_name("something"), don't forget it now! session_start(); // Unset all of the session variables. $_SESSION = array(); // If it's desired to kill the session, also delete the session cookie. // Note: This will destroy the session, and not just the session data! if (isset($_COOKIE[session_name()])) { setcookie(session_name(), '', time()-42000, '/'); } // Finally, destroy the session. session_destroy(); 

У меня возникли проблемы с документированным подходом PHP к уничтожению сеанса с помощью файлов cookie.

 // If it's desired to kill the session, also delete the session cookie. // Note: This will destroy the session, and not just the session data! if (ini_get("session.use_cookies")) { $params = session_get_cookie_params(); setcookie(session_name(), '', time() - 42000, $params["path"], $params["domain"], $params["secure"], $params["httponly"] ); } 

Это привело к тому, что я увидел, что файл cookie установлен дважды:

 Set-Cookie: SESSION_NAME=deleted; expires=Sat, 08-Jan-2011 14:09:10 GMT; path=/; secure Set-Cookie: SESSION_NAME=1_4f09a3871d483; path=/ 

Как указано в комментариях PHP, установка значения cookie для чего-то другого, кроме пустого (''), устраняет «удаленное» значение, но второй набор файлов cookie остался.

Чтобы избавиться от этого, мне пришлось добавить код, предложенный выше:

 ini_set('session.use_cookies', '0'); 

Я не смотрел на источник обработки сеансов, но я предполагаю, что setcookie (…) обходит модуль сессий, поэтому сеансы не знают, что я его назвал. Таким образом, он устанавливает cookie по умолчанию после того, как я настроил удаленный файл cookie.

Я тестировал mac: PHP 5.3.6 с Suhosin-Patch (cli) (построено: 8 сентября 2011 19:34:00)

Способ сделать это – настроить сеансы самостоятельно.

В центральном файле include, в который включены все ваши другие файлы (у вас есть один из них, не так ли?), Вам нужно сделать несколько вещей уже практически.

 if( !array_key_exists('sessionid', $_POST) ) { // recreate the sessionid $sessionid = md5(rand().' '.microtime()); // Or something } else { $sessionid = $_POST['sessionid']; session_id($sessionid); session_start(); 

Теперь вы должны помнить, что как только вы запустите форму, вам необходимо включить:

 <input type='hidden' name='sessionid'><?= session_id() ?></input>