2015-01-16 8 views
2

쿠키를 사용하여 웹에서 로그인 할 때 '내 정보 기억'옵션을 구현합니다. 쿠키 설정은 정상적으로 작동합니다. 설정을 해제하는 데 사용됩니다. 그런 다음 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 속성을 사용하지 않는 것이 좋습니다. 암호 쿠키의 이전 값을 사용하면 다른 사용자가 다른 사용자와 로그인 할 때 충돌이 발생하지만 테스트를 거쳤으므로 새로운 사용자의 암호가 이전 사용자의 암호를 덮어 쓰게됩니다.

답변

0

문제는 httponly가 아니라 다른 어떤 문제에도 연결되어 있지 않지만 "메인"도메인 (e-history.cz)의 "도메인"쿠키 속성은 도메인에 자동으로 접두사가 붙습니다. 점으로. test 서브 디렉토리 (e-history.cz/test)에서는 이런 일이 발생하지 않았습니다. 결과적으로 테스트 도메인이 httponly 쿠키로 작동하더라도 메인 도메인에서 생성 된 쿠키를 삭제할 수 있었지만 test 하위 디렉토리에서 쿠키를 삭제할 수 없었습니다. 도메인에 명시 적으로 점을 추가 했으므로 이제는 모든 것이 잘 동작합니다. 기본 및 테스트 도메인에 대해 동일한 쿠키를 사용하는 것이 현재 문제가되지 않는 것 같습니다. 문제가있는 경우 완전히 설정해야합니다 (설정된 도메인 대신 기본값 인 null 또는 ''을 설정하여).