2011-05-11 6 views
7

안녕 얘들 아,이게 내 Stackoverflow에 대한 첫 번째 질문이 될 것입니다.session_start()를 사용하지 않고 세션이 있는지 확인하십시오.

사람이 활성 세션을 가지고 있는지 확인하고 다른 세션이있을 때 다른 페이지로 리디렉션하고 싶습니다. 그러나 session_start()을 사용하고 싶지 않습니다. 개인 PC에 쿠키를 저장하기 때문에 (로그인하지 않았을 때 사람들의 PC에 쿠키를 놓고 싶지는 않습니다). 자신의 PC에 쿠키를 두지 않고 기존 세션을 확인하는 방법이 있습니까?

미리 감사드립니다.

+2

'session_start'를 사용하는 것이 좋습니다. 로그인하지 않은 상태에서 사용자의 PC에 쿠키를 두어도 문제가되지 않습니다. –

+0

클라이언트의 불필요한 쿠키는별로 중요하지 않지만 'session_start'는 서버에 빈 세션 파일을 생성합니다 (어느 시점에서 GC-ed되어야 할 것입니다). 그래서 그것은 무료가 아닙니다. – ddekany

답변

7
가 있었다면 당신은 귀하의 사이트의 다른 클라이언트가 다시 보낼 것이다 세션 ID 쿠키의 존재에 대한 이전 설정을 확인할 수 있습니다

: 당신이 다음에 대해 확인할 수 있습니다, 추가 안전을 위해

if (isset($_COOKIE[session_name()])) { 
    ... most likely there's a session available to be loaded ... 
} 

세션 파일의 존재 file_exists()

+0

+1 | Aaron에게주의 : Marc는 ** 가능한 ** 세션을 사용합니다. 세션이 아직 만료되지 않았지만 서버가 세션을 종료 한 경우'isset ($ _ COOKIE [session_name()])'은 여전히 ​​true를 반환합니다. 세션이 너무 일찍 종료되었는지 여부를 처음에 알 수 없기 때문에 사용자 브라우저는 쿠키를 보냅니다. – MicronXD

+0

이 방법은 세션이 여전히 활성화되어 있는지 여부를 확인하지 못합니다. 클라이언트가 쿠키를 보내는 경우 서버의 파일이 여전히 이지만 만료 된 것으로 이미 표시된 경우 일 수 있습니다. GC를 실행하면 파일이 삭제됩니다! –

+0

답장을 보내 주셔서 감사합니다. 세션이 만료되었는지 어떻게 확인합니까? –

2

당신은 전류를 반환하는 함수 session_id()에 대해 확인할 수 있습니다 하나에 전달하는 경로를 구축 session_save_path()session_name()을 사용 (기본 파일 기반 처리기를 사용하는 가정) 사용자의 세션 ID 또는 빈 문자열 어떤 세션이 존재하지 않는 경우 :

if (empty(session_id())) { 
    /* redirect or logic here here, example: */ 
    header('location:path/to/your/session/start/page'); 
    exit(); 
} 

을 아니면 세션 쿠키/전역 변수 (isset($_SESSION) 또는 isset($_COOKIE[session_name()]를 설정되어 있는지 확인할 수 있습니다. Doc for session_id()here

2

먼저 테스트 해 보겠습니다.하지만 session_id() != ""은 세션이 있으면 true이고 그렇지 않은 경우 false가 될 것입니다.

+1

괄호 밖에서는 '!'가 필요하지 않습니다. 단지 'session_id()! = ""'또는 더 나은 아직'! empty (session_id())'. –

+0

'session_id()'는 내가 사용중인 세션이 있어도 항상 빈 문자열을 나에게 돌려주는 것처럼 보입니다. –

관련 문제