У меня возникли проблемы с документированным подходом 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)