phpでのセッションの有効期限設定


phpでのセッションの有効期限設定
2009-12-2|19:07分類:技術詳細|4407 views
ネット上の多くの人はphpプロファイルのsessionを修正しました.gc_maxlifetime.セッションの回収メカニズムをもっと知りたいなら、読み続けます.(本環境php 5.2)
概要:phpリクエストごとに1/100の確率(デフォルト)で「session回収」がトリガーされます.「セッション回収」が発生した場合、/tmp/sess_*がチェックされます.のファイルは、最後の変更時間が1440秒(gc_maxlifetimeの値)を超えた場合に削除され、これらのセッションの有効期限が切れたことを意味します.
1.sessionはserver側(一般的にApache with PHP module)にどのように存在しますか?
デフォルトでは、phpはセッションを/tmpディレクトリに保存します.ファイル名はこのようにします.sess_01aab840166fd1dc253e3b4a3f0b8381.各ファイルはセッション(セッション)に対応します.
more/tmp/sess_01aab840166fd1dc253e3b4a3f0b8381
username|s:9:"jiangfeng";admin|s:1:"0";
#変数名|タイプ:長さ:値
ここのセッションファイルを削除すると、対応するセッションが失効したことを示します.
2.sessionはclient側(一般的にブラウザ)にどのように存在しますか?
セッションはブラウザ側で、セッションID(server側で生成された一意のID)を保存するだけでよい.クッキーの中、urlの中の2つの保存方法があります.クッキーにセッションIDを保存すると、ブラウザのクッキーにPHPSESID変数が表示されます.URL伝達であればindex.php?PHPSESID=01 aab 840166 fd 1 dc 253 e 3 b 4 a 3 f 0 b 8381のURLです.(server側でsession.use_cookiesでどの方式を使用するかを制御)
3.server側でphpはsessionファイルが期限切れであるかどうかをどのように判断しますか?
「最後の変更時間」が「現在」を超えた場合maxlifetime(デフォルトは1440)秒で、このセッションファイルは期限切れとされ、次のセッションが回収されると、このファイルが変更されていなければ、このセッションファイルは削除されます(セッションは期限切れです).
簡単に言えば、あるサイトにログインして1440秒(デフォルト)以内に操作したことがなければ、対応するセッションは期限切れだと思います.
だからphpを修正します.iniファイルのgc_maxlifetime変数はsessionの有効期限を延長できます:(たとえば、有効期限を86400秒に変更します)
session.gc_maxlifetime = 86400
そして、あなたのwebサービス(一般的にapache)を再起動すればいいです.
注意:php 5ではsessionが期限切れになって回収メカニズムが使用されています.ここで設定時間は86400秒であり,sessionが86400秒以内に修正されなかった場合,次の「回収」時に本当に削除される.
3.session「回収」はいつ発生しますか?
デフォルトでは、phpリクエストごとに1/100の確率で回収が発生するので、「phpリクエスト100回ごとに回収が発生する」と簡単に理解できるかもしれません.この確率は以下のパラメータによって制御される
#確率はgc_probability/gc_divisor
session.gc_probability = 1
session.gc_divisor = 100
注意1:この場合gc_maxlifetime=120で、セッションファイルの最終変更時間が120秒前であれば、次の回収(1/100の確率)が発生する前に、このセッションは依然として有効です.
注意2:セッションがセッションを使用する場合.save_pathでは別の場所でsessionを保存しますが、session回収メカニズムでは期限切れのsessionファイルが自動的に処理されない可能性があります.この場合、期限切れのセッション:cd/path/to/sessionsを手動(またはcrontab)で削除する必要があります.find -cmin +24 | xargs rm
4.いくつかの特殊な状況
回収メカニズムはファイルの「最終修正時間」をチェックするので、あるセッションがアクティブであるが、セッションの内容が変更されていない場合、対応するセッションファイルも変更されておらず、回収メカニズムは長時間アクティブではないセッションとして削除する.これは私たちが見たくないもので、以下の簡単なコードを追加することでこの問題を解決することができます.

   
   
   
   
<?php if(!isset($_SESSION['last_access'])||(time()-$_SESSION['last_access'])>60) $_SESSION['last_access'] = time(); ?>

コードは60秒おきにセッションを変更しようとします.
まとめ:セッションの有効期限を変更したい場合は、変数gc_を変更します.maxlifetimeでいいです.php 5のセッションは受動的な回収メカニズム(garbage collection)を採用している.期限切れのセッションファイルは、自分で消えるのではなく、「回収」をトリガーして期限切れのセッションを処理します.