Файлы cookie не удалены - PullRequest
       5

Файлы cookie не удалены

3 голосов
/ 06 февраля 2012

Странный вопрос.

Это index.php:

session_start();
print_r($_COOKIE);
print_r($_SESSION);

Это logout.php:

session_destroy();
$_COOKIE['key'] = "";
$_COOKIE['usr_email'] = "";
setcookie("key", "", time() - 3600);
setcookie("usr_email", "", time() - 3600);
header("Location: http://www.site.net/index.php");

Когда я загружаю logout.php, после перенаправления на index.php я получаю:

Array
(
    [fc] => fcVal=6927578914025605120
    [PHPSESSID] => na015ipu3s69hhj00sgd0h1es6
)
Array
(
    [key] => cc2bffe0c1e36bc5790f5b78b11e5f50
    [usr_email] => myemail@gmail.com
)

Сессии в порядке, так как я генерирую их при загрузке index.php, но как все еще присутствует cookie?

Примечание

У меня есть еще один код в index.php, который определяет, была ли заполнена форма входа в систему и начинает ли аутентифицировать пользователя. Если пользователь / пароль верны, он устанавливает два сеанса и два файла cookie (usr_email и ключ).

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

Также актуально Вот как я устанавливаю куки при аутентификации пользователя:

    setcookie("key", $cookie['key'], time() + 36000);
    setcookie("usr_email", $cookie['usr_email'], time() + 36000);

Версия PHP: PHP 5.3.6-13

Последнее редактирование

Как писал Джош в комментариях, я путал отпечаток печенья с сеансом, я не смог удалить переменные сеанса, а не переменные печенья.

Ответы [ 2 ]

2 голосов
/ 06 февраля 2012

Из Руководства PHP :

... [session_destroy ()] не сбрасывает ни одну из глобальных переменных, связанных с сеанс, или сбросить cookie сеанса ...

Чтобы полностью завершить сеанс, хотел бы выйти из системы , Идентификатор сеанса также должен быть не установлен. Если cookie используется для распространения идентификатор сеанса (поведение по умолчанию), тогда файл cookie сеанса должен быть удален. Для этого можно использовать setcookie ().

Примечание: PHPSESSID - это файл cookie, распространяющий идентификатор сеанса.

Попробуйте следующее, чтобы очистить переменные сеанса от повторного использования:

// Example #1 Destroying a session with $_SESSION
// 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 (ini_get("session.use_cookies")) {
    $params = session_get_cookie_params();
    setcookie(session_name(), '', time() - 42000,
        $params["path"], $params["domain"],
        $params["secure"], $params["httponly"]
    );
}

// Finally, destroy the session.
session_destroy();

Примечание: session_start() должен быть вызван до того, как session_destroy() сможет работать.

0 голосов
/ 06 февраля 2012

Вы создаете куки в подкаталоге? Если это так, убедитесь, что вы добавили путь cookie. Вот пример

setcookie("usr_email", "", time() - 3600, '/directory-name/');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...