Php cookie не удаляется / не удаляется - не удается выйти

0

Поэтому я попробовал несколько других "решений" по моей проблеме (как на этом сайте, так и на других) и не могу найти решение, которое работает для меня.

Я пытаюсь установить cookie для входа в мой пользователь, а затем при выходе из системы удалите этот файл cookie. Вот мой код.

list ($check, $data) = check_login($dbc, $_POST['Username'], $_POST['Password']);
    if ($check) {
        setcookie('Username', $data['Username'], time() + 60*60*24*90);
        header('Location: RedirectPage.php');

Который проверяет имя пользователя и пароль, которые были введены в форме входа (и приняты), Если это так, cookie "Username" устанавливается с именем пользователя, выведенным из базы данных, и временем, равным 90 дням, и затем пользователь перенаправляется,

Эта часть работает нормально, она регистрирует пользователя, как и следовало ожидать.

Однако в части удаления,

header('Refresh: 0;');

setcookie('Username', '', time() - 60*60*24*90);
unset($_COOKIE['Username']);
require ('RedirectPage.php');
redirect_user();

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

Кроме того, это не работает. setcookie (для удаления) ничего не делает, и unset cookie работает только на странице после ее запуска (в данном случае index.php), и как только я нажимаю на другую страницу, либо обновляю страницу, которую она "забывает", что файл cookie удален.

Теперь перейдем в элемент проверки Chrome, чтобы проверить cookie, который я получаю

Username, "Value" (the withdrawn username), r3gamers.com (domain), / (path), 2015-02-03T13:45:00 (Expires/MaxAge), 19 (Size) and HTTP and Secure are both set as empty. 

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

Есть идеи? Насколько я знаю, я делаю все, что нужно сделать.

EDIT: Я также хотел бы упомянуть, что при тестировании на локальном хосте, автономном через netbeans эта функция действительно работает. Однако, когда я загружаю страницы в godaddy для своего сайта, они перестают работать должным образом.

Теги:
cookies
logout

2 ответа

3
Лучший ответ

Я нашел ответ. Это тоже глупый ответ. Вот полный файл кода, который я использовал для выхода из системы.

<?php

require_once ('Connection.php');

header('Refresh: 0;');

            if (!isset($_COOKIE['Username'])){
                header('Location: LoginFunctions.php');
            } else {
                setcookie('Username', '', time()-60*60*24*90, '/', '', 0, 0);
                unset($_COOKIE['Username']);
                header('Location: index.php');
            }


?>

Проблема, которую я не могу показать здесь, заключалась в том, что в открывшемся php-теге был один разрыв строки, что означает, что она началась в строке 2. Почему это было так, изначально я не знаю, но эта небольшая ошибка означала что он работал на localhost и не работал на godaddy. Как расстраивает. По крайней мере, я исправил проблему сейчас.

Для будущего использования, для тех, кто придерживается одной и той же проблемы, очевидно, что godaddy (или большинство хостинговых сайтов) требует, чтобы все добавления, редактирования или удаления файлов cookie происходили из строки 1, поэтому тег php, который включает файл cookie, должен быть в строке 1, no html-код может превзойти этот тэг php или любые разрывы строк, тег php должен начинаться в строке 1.

  • 0
    Ваш ответ был полезен (у). Однако это не просто чертовски вещь.
0

Вы не задаете путь к вашему файлу cookie, я предполагаю, что вы хотите, чтобы он был на сайте, поэтому вы должны установить путь к '/':

setcookie('Username', $data['Username'], time() + 60*60*24*90, '/');

И затем, при ее снятии, попробуйте использовать 1 вместо time() - 60*60*24*90 (также все еще указывая путь), в противном случае время истечения срока действия файла cookie может варьироваться в зависимости от пользовательских часов компьютера:

setcookie('Username', '', 1, '/');

Я думаю, что ваша проблема в самом деле - это путь, который не задан: http://php.net/manual/en/function.setcookie.php

Если установлено значение '/', файл cookie будет доступен во всем домене. Если установлено значение '/foo/', cookie будет доступен только в каталоге /foo/и всех подкаталогах, таких как /foo/bar/домена. Значение по умолчанию - это текущий каталог, в который установлен файл cookie.

Дело в том, что если вы находитесь в /logout/doit.php и пытаетесь установить время истечения срока действия cookie на отрицательное значение, он создаст новый файл cookie с параметром path/logout/и установит время его истечения. (Вместо того, чтобы устанавливать время истечения срока действия вашего cookie на вашем сайте)

  • 0
    Это было то, что я имел прежде, я удалил это, чтобы видеть, помогло ли бы это, и это, казалось, не имело никакого значения. Теперь я добавил его точно так, как вы упомянули, и не имеет значения, как работает сайт.
  • 0
    Может быть, установить его в null значение также ...? setcookie('Username', null, 1, '/'); Судя по тому, что я вижу в вашем посте, cookie-файл сам устанавливает путь '/' ... так что проблема действительно заключается в том, как он не установлен.
Показать ещё 6 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню