2012-02-24 4 views
0

세션이 종료되지 않습니다. 아래의 매우 간단한 코드를 참조하십시오. 시작 버튼은 세션을 시작하고 아래에서 ID와 시간을 시간 초과까지 인쇄합니다. 나는 그것을 5 초로 설정했다. 그러나 5 초 이상 기다렸다가 새로 고침을하면 여전히 id와 5 초가 나타난다. 여기에 뭔가가 빠졌습니까? the php documentation에서PHP 세션이 시간 초과되지 않음

<?php 

echo <<<_END 

<form method="post" action=""> 
<input type="hidden" name="start" value="yes"/> 
<input type="submit" value="Start session"/> 
</form> 
_END; 

if (isset($_POST['start'])) 
{ 
session_start(); 
ini_set('session.gc_maxlifetime', 5); 
ini_set('gc_probability', 100); 
ini_set('gc_divisor', 100); 
} 

echo session_id(); 
echo "<br>"; 
echo ini_get('session.gc_maxlifetime'); 

?> 
+0

세션 아이디는 설정되어있는 쿠키이며 브라우저에서 계속 쿠키를 보내는 경우 동일한 ID로 세션을 다시 시작합니다. '$ _SESSION'에서 무엇인가를 _store_ 시도하고 그것이 여전히 존재하는지보십시오. 또한,'ini_set'의 _before_'session_start'를 수행하십시오. – Wrikken

답변

1

:

To use cookie-based sessions, session_start() must be called before outputing anything to the browser..

+0

예. 세션 변수를 사용하고자하는 모든 페이지에서 호출되어야하므로'if' 문에 넣는 것은 여기서 작동하지 않습니다. – ceejayoz

0

기본적으로 PHP 세션 데이터 저장소에있는 tmp 디렉토리 은 임시로 세션 임시 데이터를 삭제할 때 너무 작을 수 있습니다. 세션 maxlifetime을 늘리십시오.

은 (기본 세션으로 크론에 의해 삭제합니다.이 삭제 작업을 실행할 수 있을까요?)

+0

내 지식으로는 오래된 세션 파일은 cron에 의해 삭제되는 것이 아니라 실제로'session_start()'에 의해 삭제됩니다. 모든'session_start()'에는 세션 가비지 수집기가 호출되어 이전 세션 파일을 제거 할 가능성이 적습니다. OP는 GC의 동작을'ini_set ('gc_probability', 100); ini_set ('gc_divisor', 100);'. – Basti

+0

너무 짧은'session_maxlifetime'이 문제를 일으킬 수 있다고 주장하는 소스를 찾을 수 없습니다. 우리에게 도움을 줄 수 있니, 제발? – Basti

0

ini_set 그냥 현재 페이지의 설정을 변경할 수 있습니다. 페이지 상단에있는 if 외부 코드를 입력 해보십시오. 세션을 처리 할 때마다 session_start 번으로 전화해야합니다.

<?php 

ini_set('session.gc_maxlifetime', 5); 
ini_set('gc_probability', 100); 
ini_set('gc_divisor', 100); 
session_start(); 

echo <<<_END 
<form method="post" action=""> 
<input type="hidden" name="start" value="yes"/> 
<input type="submit" value="Start session"/> 
</form> 
_END; 

if (isset($_POST['start'])) 
{ 
    $_SESSION['test'] = 'I should disappear on next request after 5 seconds'; 
} 

echo $_SESSION['test']; 

?> 
관련 문제