Я пытаюсь устранить функцию выхода из системы для веб-приложения. Когда вы вошли в систему, в приложении установлено несколько файлов cookie для своего домена. Вот текущая процедура выхода:
session_destroy()
а также проходит через все файлы cookie для домена и устанавливает срок их действия в прошлом (см. Код ниже) В конце этого процесса все остальные файлы cookie не установлены, но PHPSESSID
cookie PHPSESSID
все еще существует, имеет такое же значение и по-прежнему истекает в конце сеанса.
Что мне здесь не хватает?
Вот функция выхода из системы, о которой я говорил выше:
function log_out_current_user() { // Destroy the session if (isset($_SESSION)) { session_destroy(); } // Expire all of the user's cookies for this domain: // give them a blank value and set them to expire // in the past if (isset($_SERVER['HTTP_COOKIE'])) { $cookies = explode(';', $_SERVER['HTTP_COOKIE']); foreach($cookies as $cookie) { $parts = explode('=', $cookie); $name = trim($parts[0]); setcookie($name, '', time()-1000); setcookie($name, '', time()-1000, '/'); } // Explicitly unset this cookie - shouldn't be redundant, // but it doesn't hurt to try setcookie('PHPSESSID', '', time()-1000); } }
Вы не удаляете его с теми же параметрами, которые были созданы. Используйте session_get_cookie_params
для их получения. Чтобы быть переносимым, вы должны получить имя файла cookie с именем session_name
. Вот небольшой скрипт для этого:
$params = session_get_cookie_params(); setcookie(session_name(), '', 0, $params['path'], $params['domain'], $params['secure'], isset($params['httponly']));