PHP SESSION TIMEOUT
//////////////////////// 以下をすればいい。2時間にしたいとき。
mkdir /home/zz.jp/www/sess
chmod 777 /home/zz.jp/www/sess
////
<?php
ini_set("session.cookie_lifetime", 0);
ini_set("session.gc_maxlifetime", 60 * 60 * 2); // 7200秒
ini_set('session.save_path', '/home/zz.jp/www/sess');
session_start();
/////////// .htaccessならば.
php_value session.cookie_lifetime 0
php_value session.gc_maxlifetime 3600
php_value session.save_path /home/zz.jp/www/sess
session.cookie_lifetime = 0
これはクライアント側のCOOKIEへの命令で、
ブラウザ閉じるまで保持してね。という命令。
.
session.gc_maxlifetime = 1440
デフォルトは、24分( 1440秒 )
これは、きっと、サーバサイドの命令で、
24分経過したセッションは全て削除しますよ。ということらしい。
つまり、
A, Bサイトがあって、同じ
session.save_path
の場合で、
Aが、24分、
Bが160分の場合、
Aにアクセスすると、
Bで作成された160分のSESSIONファイルが24分経過していれば
削除されてしまう。
これを回避する為には、
サイトごとに
session.save_path
を設定すればいい。
こんな感じ。
<frame>
mkdir /home/zz.jp/www/sess
chmod 777 /home/zz.jp/www/sess
vi /home/zz.jp/www/lib/env.php
<frame>
ini_set('session.save_path', '/home/zz.jp/www/sess');
session_start();
</frame>
</frame>
実際には以下のロジックとのこと。
<frame>
session.gc_probability
(session.gc_divisorがGCの起動する確立)
phpのDefaultは以下なので、
session.gc_probability = 1
session.gc_divisor = 100
session.gc_maxlifetime = 1440
1440秒経過したデータを、1/100 の確立で削除するということ。
</frame>
// Thanks.
phpのセッションの時間設定(長くしたい、うまく反映されないなど)
http://www.softel.co.jp/blogs/tech/archives/229
PHP のセッション寿命の設定
http://k-ishik.seesaa.net/article/116075297.html
セッション(session)の有効期限を設定するには
http://webcache.googleusercontent.com/search?q=cache:mNHBbzncvh0J:monolog.spanstyle.com/2005/07/session.html+session.gc_probability&cd=3&hl=ja&ct=clnk&gl=jp
覚えておくと便利な5つの.htaccessテクニック
http://rontan.sakura.ne.jp/2009/05/tips_htaccess_php/
sessionのタイムアウトについて。
http://webcache.googleusercontent.com/search?q=cache:-uJBFRUOiZoJ:d.hatena.ne.jp/Leila/20080618/1213757481+session.gc_maxlifetime&cd=2&hl=ja&ct=clnk&gl=jp
php.iniの設定がデフォルトなら
こんなかんじ↓
session.gc_probability = 1
session.gc_divisor = 100
session.gc_maxlifetime = 1440
これだと、
「1440秒(24分)より前に更新されているsessionは
他のsessionが更新された時に、1/100の確立で削除するよ♪」
というカタチ。
直接php.iniの設定を変更すると、全プログラムに関わっちゃうので
configの設定ファイル内で
ini_set('session.gc_maxlifetime', 10800);
を追記。
検証の時は、1/100の確立を待ってるのが面倒だから
ini_set('session.gc_divisor', 1);
も追記して、
3時間過ぎたら他session更新時100%の確立で削除。
これで、
「もしsessionが3時間以上経ってからアクセスしたら
新しいsession吐き出すぞー♪」
「3時間経ってたら、アクセス前に一定確率でsession削除するかもね☆彡」
という感じに変わった~♪