Подтвердить что ты не робот

PHP - почему я не могу избавиться от этого cookie id сессии?

Я пытаюсь устранить функцию выхода из системы для веб-приложения. Когда вы вошли в систему, в приложении установлено несколько файлов cookie для своего домена. Здесь текущая процедура выхода:

  • Вы щелкните ссылку, которая отправит вас на страницу выхода
  • Страница выхода из системы выполняет функцию, которая вызывает session_destroy(), а также выполняет цикл всех файлов cookie для домена и устанавливает срок их действия в прошлом (см. код ниже).
  • Страница выхода из системы затем перенаправляется на страницу входа, которая является прямым HTML.

В конце этого процесса все остальные файлы cookie не установлены, но cookie PHPSESSID все еще существует, имеет такое же значение и по-прежнему истекает в конце сеанса.

Что мне здесь не хватает?

Здесь функция выхода из системы, о которой я говорил выше:

function log_out_current_user() {

        // Destroy the session
        if (isset($_SESSION)) {
            session_destroy();
        }

        // Expire all of the user 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);
        }

    }
4b9b3361

Ответ 1

Вы не удаляете его с теми же параметрами, которые были созданы. Используйте session_get_cookie_params, чтобы получить их. Чтобы быть портативным, вы должны получить имя файла cookie через session_name. Вот небольшой script, чтобы сделать это:

$params = session_get_cookie_params();
setcookie(session_name(), '', 0, $params['path'], $params['domain'], $params['secure'], isset($params['httponly']));