[PHP-users 2754] Re: cookie を使わないときの sessionの保持期間?

まつなみ php-users@php.gr.jp
Tue, 16 Oct 2001 09:23:42 +0900


おはようございます,松並です。

yuw> だとすれば、セッションの保持機関をなるたけ正確に決めるってのは
yuw> ムリなのか。。。?

こんなのはどうでしょう。

セッションに関わる各.phpファイルの先頭部分で次のような処理を
入れることにより,セッション保持期間の秒単位の判断処理を作りこみます。

(1)セッション開始のとき(つまりセッションを再開するときでなく)
   time()関数で得られる数値をセッション変数START_TIMEに格納。

(2)セッションを再開するときに,現在のtime()関数で得られる
   数値とセッション変数START_TIMEの差を求める。この差の数値が
   セッションを開始してからの秒数となります。

(1)と(2)の場合の区別は,セッション変数START_TIMEがなければ(1)
あれば(2)という判断でよいかと思います。

(2)の処理で,もし指定秒数より経過していたなら,セッション変数を
全部クリアするなどの処理をして,(1)と同じ状況を作ればよいかと思います。

define('SESSION_TIMEOUT', 100);	// 100秒

function start_my_session() {
    global $HTTP_SESSION_VARS;
    
    start_session();
    if(!session_is_registered('START_TIME')) {
        // (1)のケース
        session_register('START_TIME');
        $HTTP_SESSOIN_VARS['START_TIME'] = time();
    }
    else {
        // (2)のケース
        $now = time();
        $start = $HTTP_SESSION_VARS['START_TIME'];
        if($now-$start>SESSION_TIMEOUT) {
            // (1)と同じ状況を作る
            session_unset();
            session_destroy();
            session_start();
            session_register('START_TIME');
            $HTTP_SESSOIN_VARS['START_TIME'] = time();
        }
    }
}

として,セッションに関わる各.phpファイルの先頭でこの関数を
呼ぶとか。

※試してません!急いで作ったので間違ってるかも。

ちなみに,php.iniで設定するセッションファイルの保持期間を
(2)における指定秒数以上の値にしておく必要はありますのでご注意を。

よかったら試してみてください。

-- 
まつなみ <mat@abelia.ocn.ne.jp>
http://putyou.matwerks.com/