- ベストアンサー
セッションを保持する時間を確定する関数ってあるのでしょうか?
タイトル通りなのですが、PHPでセッションを保持する時間を確定する関数ってあるのでしょうか? 検索すると、php.iniのsession.gc_maxlifetimeを指定すれば可能のようですが、PHPファイルにセッションの保持時間を違う物に指定したい場面がありますので、使用できません。 ここでは1時間、ここでは2時間、というようにPHP文中で指定する関数というのはありますでしょうか? よろしくお願いいたします。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
ちょっと探しましたが、ありそうだけど、無いのですかね? 実質的には無くてもあまり問題ないから、無いのかもしれません。 Cookieと違い、セッションというのは、一連の動作のなかで保持されるものです。基本的には途中で止めるまでは保持されるべきものだと思いますが、何時間も、という事だと確かに。 php.iniのsession.gc_maxlifetimeで指定出来るようですが、デフォルトは18000秒=300分=5時間という事ですね。ちょっと長い気はするけど、まぁ一般的には妥当な数字かと。 環境によって違いますが、場面場面で変える場合は .htaccessで変更可能かと。 例えば1時間に設定する場合 <IfModule mod_php4.c> session.gc_maxlifetime = 3600 </IfModule> プログラム的に実装する事も比較的簡単だと思います。 短くする場合は特に簡単です。セッションに開始時刻を入れておき、それ以上経過した場合はセッションを破棄すればいいです。 例えば、 $now = time(); if(($now - $_SESSION[s_time]) < 3600){ $time = round(($now - $_SESSION[s_time])/60); echo "あと{$time}分内に処理を終えて下さい"; }else{ unset($_SESSION); $_SESSION[s_time] = $now; echo "有効期限切れなので最初からやり直して下さい"; } のように。 #上記コードは検証していないので、ちゃんと動くか分かりませんが、だいたいそんな感じです。 逆に、5時間とかケチケチしないで何時間でも保持したい場合は、セッションIDをuniqid()あたりで作ってcookieに格納しておき、セッションIDに紐づくデータをサーバ側のDBなりテキストに保持しておけば良いです。
お礼
なるほど、無いのですか。 私も検索してみて無かったので、やっぱり無いのでしょうかね。 ただ、やりたいことは.htaccessで可能のようですのでご回答していただきました方法を試してみます。 ご回答頂き、ありがとうございます。