Я использую куки, чтобы реализовать опцию «запомнить меня» для входа в мою сеть. Настройка cookie работает нормально. Отключение используется для работы. Затем я сделал новую версию сайта, используя куки httponly; logout работал на localhost, но не работает на сервере. Я запускаю новый код в каталоге «test»; Я все еще могу использовать старый код, который хорошо работает для файлов cookie, установленных в старой функции входа в систему (но не в новой).
На всякий случай это может быть важно, и чтобы доказать, что в ответах на связанные вопросы лайк неверные параметры, тестирование на той же странице, заголовки уже отправлены или относительное время при отключении куки, я показываю свои коды. Сначала код, устанавливающий куки (новые):
...
setcookie ('login', $login, time()+60*60*24*30,'/','e-history.cz', false, true);
setcookie ('pass', $pass, time()+60*60*24*30,'/','e-history.cz', false, true);
...
Мой скрипт выхода из системы:
<?php
include 'login_functions.php';
logout();
?>
И функция выхода из системы:
function logout() {
include 'library.php'; //all functions and constants
//var_dump( headers_sent() ); //I've tested the headers, not sent yet
checkSession(); //starts session if not started
unset($_SESSION['login']); //I don't need to delete the rest of the session for logout
if(isset($_COOKIE['login'])) {
setcookie ('login', '', 1,'/','e-history.cz', false, true);
}
if(isset($_COOKIE['pass'])) {
setcookie ('pass', '', 1,'/','e-history.cz', false, true);
}
header('Location:index.php');
}
Я проверил заголовки — они работают хорошо. Заголовки ответа (согласно HTTP Spy расширение для Chrome) включает в себя следующее:
Set-Cookie pass=deleted;
expires=Thu, 01-Jan-1970 00:00:01 GMT;
path=/;
domain=e-history.cz;
httponly
Set-Cookie login=deleted;
expires=Thu, 01-Jan-1970 00:00:01 GMT;
path=/;
domain=e-history.cz;
httponly
РЕДАКТИРОВАТЬ — я делаю свой прежний «ответ» частью вопроса, потому что это работало только в течение некоторого времени; Я не знаю, почему это не работает сейчас. Я переключался несколько раз между не-httponly, httponly и смешанными файлами cookie; Каждый раз, когда я удалял старые куки, прежде чем создавать новые, старался не нарушать их. Во всяком случае, httponly, кажется, не имеет значения.
я нашел похожий вопрос говоря что сбросив
Файл cookie httponly невозможен без взаимодействия с сервером.
Теоретически, это не должно быть проблемой, так как я использую php, который работает
на стороне сервера. Однако на практике это не так просто. Но есть
решение, предложенное в его ответ: сделать одно из печенья
с другой, без свойства httponly. Я боялся, что имея
старое значение в файле cookie паролей будет конфликтовать с логином как
другой пользователь, но я проверил его, и он отлично работает, новый пользователь
пароль просто перезаписывает пароль старого пользователя.
Проблема была не в httponly и даже не в любой другой проблеме, с которой я связывался, а в домене — в «главном» домене (e-history.cz) свойство cookie «домен» автоматически начинается с точки. В подкаталоге test (e-history.cz/test) этого не произошло. В результате я смог удалить файлы cookie, созданные основным доменом, даже если тестовый домен работал с файлами cookie httponly, но я не смог удалить файлы cookie из тестового подкаталога. Я добавил точку в домен явно, и теперь все работает нормально. Использование одинаковых файлов cookie для основного и тестового доменов теперь, по-видимому, не является проблемой — если бы это было проблемой, я бы полностью удалил точку (установив значение null или » для вызова по умолчанию вместо установленного домена).
Других решений пока нет …