[PHP] sessionのタイムアウトをサーバー設定ではなく、プログラム設定で変更する方法

2015年8月25日

PHP Tips テクノロジー プログラミング

PHPを使っていてログインするサービスを構築する場合、多くはsession機能を利用する事になると思う。 その際に、PHPのデフォルトcookieの保持時間は24分になっています。 php.iniの記述を変更してcookie時間をコントロールすると確実に制御できるのですが、もしサーバー設定を変更する権限が無い場合など、PHPのプログラム内でコントロールしたい場合は多々あると思います。 そんな時の対処方法をメモしておきます。

sessionの仕組みを簡単に説明

sessionをセットするという行為は、サーバーに任意文字列をセットし、ローカル環境であるブラウザに、その任意文字列をvalue値として、cookie情報を書き込んでおく。 サーバー側のセッションタイムが切れた段階でcookieも有効期限となり、セッション切れとなる。 多くのWEBサービスのログインの仕組みでこの方法が採用されているのですが、session関数を使うメリットとしては、連想配列的に、cookieやlocalstorageに格納しておきたいデータをサーバ側に設置することができ、有効期限も持たせられることから、セキュアにデータを扱うことができるという点がもっともメリットがある。 単にログイン情報のみを保持するのであれば、cookie情報を自分で書き込んだほうが、柔軟性は高くなることは間違いない。 ただ、デフォルト24分というsessionの保持時間は、多くの場合、短いと判断される事の方が多く、基本的には変更する必要が必ずあるという事なのですね。

php.iniの設定

php.iniの以下の行を変更します。 # Default (24min) session.gc_maxlifetime = 1440 # 1Hour session.gc_maxlifetime = 3660 # 1Year (365day) session.gc_maxlifetime = 31536000

プログラムでの扱い方

PHPプログラム

下記プログラムを実行するだけで、サーバーセッションを開始する事ができます。 session_name("session_name"); session_start(); この時点では、サーバーで設定をした時間を上限としたセッション期間になりますが、 JavaScriptでcookie操作をすると、ライフタイムを短くすることが可能になります。 サイトポリシーに沿ってJS側で操作する方が柔軟性が高いでしょう。 ※脆弱性対応などを強いられる場合はサーバーのライフタイムで厳密にコントロールしましょう。

JSプログラム

# PHPで書かれたcookieのsession値を取得 var session = function(){ var cooks = document.cookie.split("; "); for(var i=0;i<cooks .length;i++){ var cook_data = cooks[i].split("="); if(cook_data[0]!="session_name"){continue} var cook_value = cook_data[1].split(";"); return cook_value[0]; } }; # 期限の設定 var expire = new Date(); # 24時間(1日)有効 expire.setTime(expire.getTime() + 24*60*60*1000 * 1); # cookie操作 document.cookie = "session_name="+session+"; expires="+expire.toGMTString()+"; "; 今回は、session_nameが1つの時だけの書き方だったのだが、 実際には、ADを入れてたりすると、各サービス事の管理値が入ったりもするので、消さないように気をつけなければいけない。

人気の投稿

このブログを検索

ごあいさつ

このWebサイトは、独自思考で我が道を行くユゲタの少し尖った思考のTechブログです。 毎日興味がどんどん切り替わるので、テーマはマルチになっています。 もしかしたらアイデアに困っている人の助けになるかもしれません。

ブログ アーカイブ