2012-01-02 5 views
0

첫 번째 페이지로드시 설정된 'loginStatus'세션 변수가 있습니다. 이 'loginStatus'가 맨 처음 설정 될 때 브라우저에 '처음으로'설정을 표시하도록 if/else가 있습니다. '처음으로'설정이 절대 나타나지 않습니다! 캐시를 지우고 Netbeans 개발 환경 외부의 브라우저 창에서 index.php 페이지를 탐색하려고했지만 중요하지 않습니다. 마치 세션이 localhost 웹 서버에 영구히 살아있는 것처럼 보입니다.세션 변수가 이미 설정되었습니다.

다음은 페이지가 처음로드 될 때 초기화되지 않은 'loginStatus'세션 변수를 감지하고 세션 변수를 한 번만 생성/초기화하는 코드입니다. 내가이 브라우저 창에서 볼 수 없을

if (isset($_SESSION['loginStatus'])) 
{ 
    // we get here ONLY if the 'loginStatus' session variable has already been 
    // created for this user's session. 
    $_SESSION['loginStatus'] = "loginStatus already set!"; 
    echo '<br />Just set the loginStatus to: ' . $_SESSION['loginStatus'] . '<br /><br />';  
} 
else 
{ 
    // we only get here the first time this is sent by the server 
    // to the user's browser -- so we need to create the 'loginStatus' session 
    // variable because the user just came to our site 
    // and has not yet logged in. 
    $_SESSION['loginStatus'] = "First-time initialization of loginStatus"; 
    echo '<br />Just set the loginStatus for the first time!<br /><br />'; 
} 

는 "그냥 처음의 LoginStatus을 설정!"

브라우저 창에서 볼 수있는 것 : "loginStatus를 다음과 같이 설정하십시오 : loginStatus가 이미 설정되었습니다!" 즉

-는 isset() 잘못 사실 난생 처음 내 페이지가로드를 반환!
브라우저에서 처음 페이지를로드 할 때 마술처럼 이미 존재하는 세션 변수에 대한 정당성은 없습니다.

오늘 밤에 코드를 작성하는 동안 위의 페이지를 여러 번로드했지만 최종 페이지를 떠나면 세션이 파괴된다는 것을 이해했습니다. 그렇다면 왜 $ _SESSION [ 'loginStatus'] 변수가 환영을받는 친척처럼 매달려 있습니까?

+0

'위해서 var_dump ($ _ SESSION)을'다시로드 포함 된 내용을보고 거기에서 작업하십시오. – Kenaniah

+0

@Kenaniah - 내가 그랬어 : array 'loginStatus'=> 문자열 'loginStatus가 이미 설정되었습니다!' (길이 = 24) – wantTheBest

+0

'session_unset(); session_destroy();'를 클릭하여 서버 측에서 브라우저 세션을 지 웁니다. – Kenaniah

답변

1

세션이 php.ini 파일의 세션 GC에 설정된 규칙에 따라 파괴됩니다. 브라우저를 닫거나 다른 페이지를 탐색 할 때 반드시 발생하는 것은 아닙니다.
php.net의 세션 매뉴얼을 읽고 세션 규칙을 가장 잘 맞는 방법으로 설정하십시오.

예를 들어 보안 수준이 높은 사이트의 경우 세션에 몇 분 밖에 걸리지 않습니다. 즉, 사용자가 해당 제한 시간 내에 서버에 요청하는 작업을 수행하지 않으면 세션이 만료됩니다.

+0

'최상의 방법'은 사용자가 사이트를 떠날 때 세션 데이터가 삭제되도록하기 위해 프로그램 방식으로 ** ** 내 웹 사이트에 대한 최종 알림에 응답하여 '사용자가 모두 닫았습니다 귀하의 사이트에있는 페이지를 떠나 떠나고, 당신이해야 할 일을 정리하십시오. ' 이 작업을 수행하는 일반적인 방법은 무엇입니까? 분명히 사용자가 내 사이트를 완료했을 때 원하지 않는 세션 변수를 제거 할 수있는 '이벤트'또는 뭔가를 '잡는'방법이 있습니다. – wantTheBest

+1

@wantTheBest : 젠체하는, 나는 트롤이 아니다. 만료 된 세션은 아무도 신경 쓰지 않지만 초보자는 나를 믿습니다. 원하는만큼 플래그를 지정할 수 있습니다. ** ** 사이트를 떠나는 이벤트를 "잡을"수있는 보장 된 방법이 없습니다. 클라이언트가 인터넷 케이블을 방금 꺼냈다면 상상해보십시오 – zerkms

-1

하지 않도록, 하지만 당신은 쿠키에이 값을 저장해야하기 때문에 그것은 수도,

시도가 쿠키를 삭제하고 페이지 상단에있는 페이지를

+0

false. 세션 데이터는 서버에 저장되며 절대로 쿠키에서 전송되지 않습니다. PHP 세션 쿠키에는 ** 세션 이름/ID 키 쌍 **이 포함됩니다. –

관련 문제