Я использую файлы cookie, чтобы реализовать опцию «запомнить меня» для входа в мой веб-сайт. Настройка cookie работает нормально. Сбросить раньше работало. Затем я сделал новую версию сайта с httponly cookies; выход из системы работал на localhost, но не работает на сервере. Запускаю новый код в директорию «test»; Я все еще могу использовать старый код, который хорошо работает для файлов cookie, установленных в старой функции входа в систему (а не в новой).
На всякий случай это может быть важно, и чтобы доказать, что у меня нет общих проблем, решенных в ответах на связанные вопросы, например неверные параметры, тестирование на та же страница, уже отправленные заголовки или относительное время при отключении файлов cookie, я показываю свои коды. Во-первых, код настройки файлов 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-файлами; каждый раз, когда я удалял старые файлы cookie, прежде чем создавать новые, и старался их не перепутать. В любом случае, httponly, похоже, не имеет значения.
Я нашел аналогичный вопрос, в котором говорится, что отключение httponly cookie невозможно без взаимодействия с сервером. Теоретически это не должно быть проблемой, так как я использую php, который работает на стороне сервера. Однако на практике это не так просто. Но есть решение, предложенное в его ответе: сделать один из файлов cookie со свойством httponly, а другой - без свойства. Я боялся, что старое значение в файле cookie пароля может конфликтовать с логином от имени другого пользователя, но я протестировал его, и он работает нормально, пароль нового пользователя просто перезаписывает пароль старого пользователя.