쿠키를 사용하여 웹에서 로그인 할 때 '내 정보 기억'옵션을 구현합니다. 쿠키 설정은 정상적으로 작동합니다. 설정을 해제하는 데 사용됩니다. 그런 다음 httponly 쿠키를 사용하여 사이트의 새 버전을 만들었습니다. logout은 localhost에서 작동했지만 서버에서는 작동하지 않습니다. "test"디렉토리에서 새 코드를 실행합니다. 나는 여전히 예전의 로그인 기능 (새로운 것이 아닌)에 설정된 쿠키를 위해 잘 동작하는 오래된 코드를 사용할 수있다.쿠키가 httponly가 true 일 때 setcookie() 삭제를 방지합니다.
이런 경우에 중요 할 수도, 내가 쿠키를 해제하기 testing on the same page, headers already sent 또는 상대 시간 동안 uncorrect parameters이, 내 코드를 보여 같은 related questions에 대한 답변에서 해결있는 일반적인 문제가없는 증명. 첫째, 쿠키 (새로운)를 설정 코드 :
...
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');
}
- 그들은 잘 했어.
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
편집을 - 그것은 약간의 시간 만 일 때문에 나는 질문의 예전의 "답"부분을; (크롬 HTTP Spy 확장에 따라) 응답 헤더는 다음과 같습니다 왜 지금 작동하지 않는지 모르겠다. 나는 비 httponly, httponly 및 혼합 쿠키 사이에서 몇 번 바꿨다; 새 쿠키를 만들기 전에 오래된 쿠키를 삭제할 때마다 쿠키가 일치하지 않도록주의를 기울였습니다. 어쨌든, httponly는 차이를 만드는 것 같지 않습니다.
나는 Http 만 쿠키를 설정 해제하는 서버의 상호 작용없이 불가능하다고 말하는 a similar question을 발견했다. 이론적으로는 문제가되지 않습니다. PHP를 사용하면 서버 측에 이 작동합니다. 그러나 실제로 그렇게 쉽지는 않습니다. 하지만 쿠키가 에 나와 있습니다. 쿠키 중 하나를 과 같게 만들고 다른 하나는 httponly 속성을 사용하지 않는 것이 좋습니다. 암호 쿠키의 이전 값을 사용하면 다른 사용자가 다른 사용자와 로그인 할 때 충돌이 발생하지만 테스트를 거쳤으므로 새로운 사용자의 암호가 이전 사용자의 암호를 덮어 쓰게됩니다.