2012-04-17 13 views
3

나는이 문제가 실제로 무엇인지 알지 못합니다.setcookie 쿠키를 제거하지 않음

"login.php"라는 스크립트가 완벽하게 작동합니다. 그것은 AJAX 호출, 그리고 성공적으로 반환하는 경우, 페이지가 새로 고쳐 사용자는에 기록됩니다. 쿠키는 그런 다음 스크립트는 "logout.php"라고했다

setcookie("main", $row[0], time() + 3600, "/") 

와 해당 페이지에 설정되어 있습니다. 같은 방법 (AJAX 및 페이지 새로 고침)이라고합니다.

페이지를 호출하는 것이 작동하지 않으므로 브라우저에 logout.php 만로드했습니다. 결과는 "완료"되었지만 Chrome에서 쿠키를 확인하면 쿠키가 여전히 "1"($ row [0])으로 설정되었고 login.php에 설정된 시간에 만료되었음을 나타냅니다.

login.php와 logout.php는 모두 다른 폴더와 동일한 폴더 인 같은 폴더에 있습니다.

이전에는이 ​​방법이 효과적 이었지만 웹 사이트의 제목 표시 줄을 (여전히 루트 디렉토리에 있음) 만들고 로그 아웃 버튼에 대한 JavaScript 기능을 사용하면됩니다. 그냥 AJAX 호출과 일부 jQuery 호버 효과를 가져 와서 자체 스크립트 파일을 만듭니다.이 스크립트 파일은 _js 폴더에 있습니다. 하지만 나는 logout.php를 전혀 변경하지 않았으므로 직접 탐색 할 때 여전히 작동해야합니다. 맞습니까? 내 setcookie 명령에 문제가 있습니까? 아니면 다른 문제가 원인 일 수 있습니까?

편집 : -3600 대신 100 초 만료되도록 설정 한 다음 이름을 변경하여 전체 쿠키를 인식 할 수 있도록 시도했습니다. 그들 중 누구도 나타나지 않았습니다. 쿠키는 전혀 설정되지 않습니다.

EDIT 2 : 마지막 커밋으로 되돌아 왔고 모든 것이 다시 작동합니다. 왜 새로운 파일을 생성하여 사이트를 재구성하는지 (logout.php는 전혀 변경되지 않음) 특정 스크립트가 쿠키를 생성 할 수 없게 만듭니다.

+0

당신은 당신이 동일한 도메인에 호출하고 있는지 있습니까? 아마 당신은 www.domain.com에 쿠키를 설정하고 제거 할 domain.com에 있습니까? –

+0

둘 다 "/"에 설정 했으므로 동일한 것이어야합니다. 둘 다 같은 폴더에 있습니다. –

+0

경로가 다르면 도메인이 다를 수 있습니다. domain.com에서 액세스 할 수없는 것보다 www.domain.com에 쿠키를 설정하는 것은 비록 그들이 똑같은 도메인이지만 이론적으로는 아닙니다. 따라서 도메인을 www.domain.com/login.php와 같이 설정하면, 로그 아웃 PHP 스크립트가 www.domain.com/logout.php에서 호출되어야합니다. domain.com/logout.php가 아닌 –

답변

3

콘텐츠가 클라이언트로 전송되기 전에 쿠키를 설정해야합니다. 요청을 통해 실제로 돌아 오는 Set-Cookie 헤더 인 setcookie를 호출하기 전에 클라이언트에 아무 것도 보내지 않았는지 확인하십시오.

포함 파일의 공간만큼이나 작은 부분이이 파일을 망칠 수 있습니다. (당신이 다른 파일에 대해 작업했다고 말하면, 포함되지 않는 것은 디버그 에코 나 공백 문자와 같은 것입니다.

독점적으로 PHP 코드 인 파일이 있다면 시작 태그 (<?php) 만 포함하고 마지막 태그는 면제합니다. PHP는 여전히 구문 분석하고 실행하지만 문제가 될 수있는 파일 끝에있는 공백을 피할 수 있습니다. 예 :

mycodefile.php

<?php 

    define('...', ...); 

    function ...(){ } 

또한, 크롬을 사용하여 언급했다. ( + SHFT 내가 + Ctrl 키) 크롬에서 디버거를 열고 네트워크 탭을 클릭합니다. 그런 다음 로그 아웃 통화를 찾아 선택하고 헤더을 클릭하고 쿠키가 삭제되는지 확인하십시오.(마찬가지로 당신이 자원을 클릭하고 설정을 볼 수 쿠키에서 찾아보실 수 있습니다.

+0

+0

logout.php는 그 두 줄에 불과하므로 setcookie가 호출되기 전에 클라이언트에 직접 보내지는 않았을 것이라고 생각합니다. 공백이 없으며 setcookie 앞에 탭이 있습니다. –

관련 문제