2011-08-01 24 views
4

私はPHPセッションのタイムアウトに関するいくつかの問題があります。アプリケーションの実行中に次の値を設定しました。php session timeout

session.gc_maxlifetime = 3600 
session.cookie_lifetime = 3600 
session.save_path = myApplicationPath/tmp 
session.use_cookies = 1 
session.use_only_cookies = 1 

ただし、セッションは約30分で終了します。また、私のtmpディレクトリは空のままなので、実際にクッキーが設定されていないようです。 echo ini_get( "session.save_path")は正しいパスを返します。

+1

だけチェックする:あなたは 'session_start'を呼んでいる前にiniファイルの値を設定していることを確認してください。さらに、 'phpinfo()'の出力と比較して、テストファイルに入れることができます。 – hakre

+0

実際には、session_startの前に値が設定されます。 phpinfoの状態:ローカル値var/www/myproject/tmpのマスター値/ etc/lib/php5。セッションファイルは引き続きマスター値に書き込まれます。 – eelco

+0

見つけた! Zend_Sessionを使用すると、他の場所で起動されたセッションに関する通知を受け取ることができません。私がZend_Sessionの使用を止めたとき、私は通知を受けました。私のコードをブートストラップに入れて問題を解決しました。 – eelco

答えて

1
私はPHPがあなたの save_pathを見つけることができないか、その上の書き込み権限を持っていないので、それはデフォルトの共有ディレクトリ内のセッションファイル( ないクッキー)(セッションを削除します最短 gc_maxlifetimeとそのサイトを保存することを言うと思います

他のすべてのサイトから)。

+0

それは私自身の推測でもあります。しかし、save_pathの出力は私に正しいパスを与え、ディレクトリは777のパーミッションを持っています。 – eelco

+0

セッションファイルは本当にデフォルトのディレクトリに書き込まれます。私はここで何が欠けていますか? – eelco

+0

'session.save_path = myApplicationPath/tmp':実際のパスは実際にスラッシュで始まっていませんか? –

2

注:

異なるスクリプトはsession.gc_maxlifetimeの異なる値を持っていますが、最小値を持つスクリプトは、データをクリーニングしますその後、セッションデータを格納するために同じ場所を共有している場合。この場合、このディレクティブをsession.save_pathとともに使用してください。

​​

+0

OPはむしろ逆の動作を記述しています。* session.gc \ _maxlifetime *は6分だが、セッションは30分までに期限切れになりません。 – Gumbo

+0

AFAIU 'session.gc_maxlifetime'は1時間です。セッションが終了する前にセッションが終了します – RiaD

+0

ああ、申し訳ありません、それは私のせいです。どのようにして3600秒を60分でなく6分に誤解することができたか分かりません。 ;) – Gumbo