2017-09-13 5 views
3

私はapache server 2.4.16でPHP 5.5.38を使用しています。私はいつか(約25分後)セッションを失うというこの問題を抱えています。私はセッションは25分ぐらいで失われます

session.gc_maxlifetime = 1440
session.gc_probability = 10

しかし、コード内で、これらは異なる値に設定されているphp.iniファイルでこれらのパラメータを発見しました。コードは次のようになります

ini_set('session.gc_maxlifetime', 60*60*24*7); 
ini_set('session.use_cookies', 1); 
ini_set('session.gc_probability', 0); 

と私はそれらが失敗しないか何かを意味する古い値を返すことを確認しました。

私は、セッションを失う原因を見つけるためにどこを探すべきか分かりません。どんなアイデアや提案も大変ありがとうございます。

+0

あなたのhtaccessファイルをチェックしましたか? 'php_value session.gc_maxlifetime'のようなものがありますか? – Thamaraiselvam

+0

はい、htaccessファイルもチェックしています。 – Shaonline

答えて

1

あなたはini_set()で設定値を設定すると、それだけで現在のスクリプトの実行中に持続:

設定オプションは、スクリプトの実行中にこの新しい値を保持し、スクリプト終了時に復元されます。

異なるスクリプトがsession.gc_maxlifetimeの異なる値を持っていますが、セッションデータを格納するために同じ場所を共有している場合:複数の値がsession.gc_maxlifetimeのためにそこにある

そして、ガベージコレクタが最低使用されます最小値のスクリプトがデータを消去します。

だから、あなたが何をする必要があるか、にあなたがセッションを使用すべてののページ、または、より良いオプションをini_set()割り当てを持っているあなたが必要とする値に直接php.iniファイルを修正いずれかです。

約25分は約1440秒(24分)ですので、間違いなくphp.iniの値を使用しています。

+0

ini_set()代入は実際にはすべてのページで使用されます。それがすべてのページにある場合、これはこの新しい価値を維持すべきではありませんか? – Shaonline

+1

@ShaonlineあなたがDebianベースのシステムを持っているなら、ガベージコレクションは、1分程度で起動するcronジョブで行われます。このスクリプト(および同様のユーティリティスクリプト)は、デフォルトのphp.ini値で実行されます。 isheggが正しい場合は、この設定をメインのphp.iniファイルに設定する必要があります。ユーザーランドのスクリプトではありません。 – OptimusCrime

+0

@OptimusCrimeが言ったことの(ビット) "ハッキー"の回避策は、 'session.save_path()'を使って 'session.save_path'を別のディレクトリに設定して、cronジョブがそれにアクセスできないようにしています。もちろんこれは理想的ではありません。 iniファイルで値を直接変更することは可能ですか? – ishegg

関連する問題