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を入れてたりすると、各サービス事の管理値が入ったりもするので、消さないように気をつけなければいけない。
0 件のコメント:
コメントを投稿