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

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

Я пытаюсь установить 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 «Имя пользователя» устанавливается с именем пользователя, полученным из базы данных, и временем, равным 90 дням, и затем пользователь перенаправляется ,

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

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

header('Refresh: 0;');

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

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

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

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

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 (войти снова) или удалить его с помощью элемента inspect.

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

РЕДАКТИРОВАТЬ:
Я также хотел бы отметить, что при тестировании на локальном хосте, в автономном режиме через netbeans, эта функция работает. Однако, когда я загружаю страницы в Godaddy для моего сайта, они перестают работать должным образом.

0

Решение

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

<?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, нет HTML-код может предшествовать этому тегу php, или любые разрывы строк, тег php должен начинаться со строки 1.

3

Другие решения

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

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

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

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

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

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

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

0

По вопросам рекламы [email protected]