2010-03-02 7 views
1

저는 유지 관리중인 PHP 웹 사이트를 보유하고 있으며, 한 곳에서 작동했음을 확인했습니다.

로그인 한 사용자의 정보를 $_SESSION['user'] 변수에 저장하는 로그인 시스템을 사용하는 웹 사이트가 있습니다. 본질적으로 세션의 해당 부분을 제거한 /logout.php을 클릭하면 사용자를 로그 아웃 한 다음 header()이 홈페이지로 리디렉션됩니다. print_r()가 디버깅을 위해 출력을 사용하는 경우 최근의로

, 상단에 session_start()/logout.php 파일은 어떻게 든 세션 정보를 볼 수 없습니다.

다른 페이지로 이동하면 세션 정보가 정상적으로 표시되지만 로그 아웃 페이지에는 표시되지 않습니다 ... 세션 정보가 액세스 할 수 없기 때문에 세션 정보를 삭제할 수없는 이유가 바로 여기에 있습니다.

나는 브라우저가 닫힐 때까지 $_SESSION가 사이트 전체에 존재한다고 생각했습니다. 나는 이런 일이 없었으며 세션 인스턴스가이 페이지에서 시작되었다는 것을 알았 기 때문에 세션 데이터를 표시하지 않는 것이 이상합니다.

아이디어가 있으십니까? 나는이 하나에 완전히 난처 해!

코드 : /logout.php

<? 
#session_start() is inside this file 
require_once($_SERVER['DOCUMENT_ROOT'].'/includes/config.php'); 

unset($_SESSION['user']); 
header("location: /"); 
exit(); 
?> 

$_SESSION['user']의 검사가 사이트 전체이며 다른 것들을 필요로 할 때 내가 그 아래 여러 항목을 호출합니다. 다른 누군가가이 사이트를 구축했으며 왜 갑자기 그 사이트가 작동하지 않는지 디버그하려고합니다.

+0

FYI -이 logout.php 페이지의 다른 환경 변수는 $ _SERVER []와 (과) 비슷합니다. 어떤 이유로 $ _SESSION [] 변수에 액세스 할 수없는 것 같습니다. 정말 이상합니다. –

+0

session_start() (및 주변)에 사용 된 코드와 작업 및 비 작동 (logout.php) 페이지 모두에 대해 $ _SESSION [ 'user']에 액세스하는 코드를 제공 할 수 있습니까? –

답변

0

당신은 당신이 시작하는 세션을 설정 똑같은 도메인에서 logout.php 액세스

(예 : example.com www.example.com/logout.php 대) 다만, 해제에 관해서 특정 세션 데이터가 있다면 session_destroy()에 전화를 걸어 쿠키를 설정 해제하여 세션을 종료하는 것이 가장 좋습니다.

+0

세션은 웹 사이트의 다른 측면에서 사용됩니다. 예, 저는 여전히 같은 도메인에 있다고 생각합니다. 나는 그것에 대해 생각해 보지 못했지만, 우리는 그것에 대해 분명히 믿습니다. 사용자 프로필 영역이 될 수 있습니다 https://www.domain.com/profile/ ... 로그 아웃은 다음과 같이 /logout.php로 전송되는과 ... https://www.domain.com /logout.php 그래서 그들은 전체 도메인에서 https를 사용하여 동일한 도메인 루트에 머무르고 있습니다. –

+0

@Will Ashworth : 질문에 logout.php 코드를 게시 할 수 있습니까? – jasonbar

+0

현재로서는 이걸 가지고 있습니다 ... 주로 디버깅을 시도하고 있습니다. 서버 출력이 표시되지만 $ _SESSION 정보는 출력되지 않습니다. 동일한 코드로 다른 페이지로 마이그레이션하면 예상대로 세션의 세부 정보가 표시됩니다. 도움 주셔서 감사합니다. –

3

도메인/하위 도메인이 페이지의 나머지 부분과 동일하면 일반적인 세션 대 출력 오류와 비슷하게 들릴 것입니다. session_start()에 전화하기 전에 클라이언트에 출력물을 인쇄 했으므로 모든 오류를 활성화하고 표시했는지 확인하십시오. 이렇게하면 기능이 중단되고 세션을 사용할 수 없게됩니다.

문제가있는 경우 문제를 해결하려면 session_start 전에 모든 출력을 제거해야합니다. <?php 이전의 공간조차도 Apache (및 기타)의 출력으로 간주됩니다. 또한 문서에서 BOM (Byte Order Mark)을 비활성화했는지 확인하십시오. 적절한 편집기를 사용하면 "현재 파일 설정"과 같은 것을 찾을 수 있습니다.

2

항상 PHP 코드의 첫 번째 줄은 session_start();이어야하며 그 밖의 것은 없음을 기억하십시오. 모든 작업을 수행하려면 세션 변수를 설정 해제하고 세션을 삭제하십시오. require_once($_SERVER['DOCUMENT_ROOT'].'/includes/config.php');을 제거하고 logout.php 파일의 끝에 session_start() 및 session_destroy()를 추가하여 작동하는지 확인하십시오.

관련 문제