平成30/ 2018-10-24 08:57
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削除するかもね☆彡」

という感じに変わった~♪