2012-02-24 20 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は設定されているCookieであり、ブラウザがまだCookieを送信していれば、同じIDで破棄されたセッションが再開されます。 '$ _SESSION'の中の何かを_store_しようとして、それがまだそこにあるかどうか確認してください。また、 'ini_set'の前に' 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を増やしてみます。

(デフォルトのセッションではcronによって削除されます。それは、削除操作を実行できますか?)

+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']; 

?> 
関連する問題