Love澤's Room

技術系ネタをまとめていたブログ。現在はカテゴリにこだわらず更新中。

PHPでSESSIONの有効期限を設定する方法

新サイトへ移転しました
約3秒後に自動的にリダイレクトします。


練習としてあるwebサービスを実装中なのだが、SESSIONを利用して、ログインしている人の情報(ログイン名とか)を保持するようなしくみを組み込んだ。
その際、SESSIONの有効期限などは特に意識していなかったが、どこかのサイトで「何も設定していない場合は24分で期限がきれますよ」的なことが書いてあった。

が、しかし、なぜか一晩放置してもSESSIONの有効期限が切れないという状況になっていたので、今回はSESSIONの有効期限を設定した。
参考サイトによると、php.iniファイルに記述する方法と.htaccessファイルに記述する方法があるらしい。

php.iniファイルをfindで検索してみたが見つからなかったので、Webサービスのトップノードにある.htaccessファイルに以下を記述することで対応した。

php_value session.gc_maxlifetime 900
php_value session.gc_probability 1
php_value session.gc_divisor 10

gc_maxlifetimeがSESSIONの有効期限を設定する変数だそう。秒で指定する。
今回は15分=900秒を設定した。普通は30分とかを設定するっぽいが、今回はとくに深い理由があるわけではない。

gc_probabilityとgc_divisorは、SESSIONを管理しているファイルを削除する頻度を設定するもの。というのも、誰かがSESSIONを発行するたびに、サーバー内部で、SESSIONファイルなるものがその都度作成されるらしい。ほっといたらサーバーの容量を圧迫するので、それを避けるために、SESSIONが発行されたら古いSESSIONファイルを削除する機能(ガーベージコレクタ)を呼び出してお掃除しているそうだ。とはいえ、毎回ガーベージコレクタを起動していても無駄じゃね?ということで、適当なタイミングでお掃除しよう、ということらしい。
今回は、gc_probability / gc_divisor = 1/10 つまり、10回に1回くらいはお掃除する設定にした。普通は1/100とか1/1000くらいにしておくらしい。

(参考サイト)