2013-04-26 17 views
8

私が働いているPHPの知識はかなり限られている小さな(読者:<ユーザー50人)非営利団体のサイトで働いています。現在私はチュートリアルのオンラインから見つけたログインスクリプトを持っています。私が実行している問題は、各ユーザーが約1時間後にログアウトしてしまうことです。最後にPHPログインセッションを作成するのに助けが必要

セキュリティは実際にはコンテンツの問題ではなく、理想的には誰かが複数日または数週間ログインしたままにしたいと思っています。しかし、セッション時間についてのGoogleの検索では、ログアウトタイマーを短くしようとしている人がいます。

限りコードが行くように、ログインページがデータベースにユーザ名とパスワードを比較して、以下の後:

session_register("myusername"); 
session_register("mypassword"); 
header("location:index.php") 

そして、それぞれの保護されたページ上のそれはで始まる:

session_start(); 
if(!session_is_registered(myusername)){ 
header("location:login.html:); 
} 
+3

FYI、 'session_register'は曖昧です –

+0

ユーザーがいったんアクティビティを持つと、セッションタイマーをリセットする方が良いでしょう。 – Raptor

答えて

7

を編集します.htaccessのようなものを置く:

php_value session.gc_maxlifetime 2000 

2000は秒です。それに応じて設定!これにより、セッションガベージコレクタは2000秒間セッションを破棄しないように指示します。また、session_registerは非推奨です。

+1

だから、その行を.htaccessに追加して、1週間のログインで値を604800に設定するだけでもいいですか? (60 x 60 24 x 7)また、サイドノートのビットとして:私はsession_registerが廃止されていることを知っていますが、私が引き出したスクリプトはこれを使用しています。 session_registerを使用せず同じ機能を維持するにはどうすれば変更できますか? –

+0

はい、604800は正常に動作します。 session_registerの代わりに$ _SESSION ['username'] = 'whatever';を使用します。 – ChrisG

+0

ありがとうございました! –

4

あなたが使用することができます(あなたがどのようにデフォルトのセッション作品の変更については何も言及しなかったので、私はあなたが信じている、)PHPのデフォルトのクッキーベースのセッション管理を使用している場合:iniファイルの値の

session_set_cookie_params(7200); // in seconds...session will last for 2 hours now 
session_start(); //once session cookie parameter is set, start the session.. 

session.gc*グループこの目的のためにも使用されますが、gcは、セッションをガベージコレクトする必要がある場合にのみお勧めします。あなたはあなたの質問や、あなたのユーザーベースの規模を考えるとおよそcookie params heregarbage collection here

+0

あなたはクッキーに関して何も変更していないと仮定して正しいです。あなたが持っているコードの最初の行、私はそれが同様に保護されたページに行くと仮定しますか? –

+0

はい、セッションのインクルードファイルに入れて、セッションがアクティブになるすべてのページにインクルードすることをお勧めします。 – raidenace

+0

これがすべてのページに含まれていると、別のページに移動するたびにセッションが7200にリセットされますか?あなたがページを変えていたら、セッションは決して終わらないでしょう –

6

を読むことができます

、私はグローバルな設定変更を選ぶのではなくセッション変数をカスタマイズしようと思います。シンプルで、必要なものを実行し、すべてのユーザーに適用する必要はほとんどありません。

あなたは.htaccessファイル使用(他の回答で概説したように)あなたのグローバルセッションの有効期間を設定することができます。

php_value session.gc_maxlifetime 86400 //this is one day in seconds 

それとも、あなたはまた、php.iniファイルでそれを設定することができます - となっているスニペットを:何もなく、純粋な参考

; After this number of seconds, stored data will be seen as 'garbage' and 
; cleaned up by the garbage collection process. 
session.gc_maxlifetime = 86400 

、あなたが長期的なガベージコレクションのために検討する必要があると思い値:

86400 = one day 
604800 = one week 

ガベージコレクション(gc)hereの詳細を読むことができます。

関連する問題