PHP: アクセスの度にセッションを延長したい

概要:デフォルトのファイルのセッションハンドラのガベージコレクションは、PHP4.2.3以降、アクセス時間(atime)ではなく、mtime(更新時刻)が使用される。

方法1

概要:アクセスの度に、時間をセッションに保存する
<?php

$_SESSION['modified'] = time();

方法2(セッションハンドラー)

概要:セッションハンドラーを登録する。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php

class FileATimeSessionHandler implements SessionHandler
{
    public function __construct()
    {
        if (ini_get('session.save_handler') !== 'files') {
            throw new UnexpectedValueException(__CLASS__.' require "session.save_handler = files"');
        }
    }
    public function gc($maxlifetime)
    {
        foreach (glob(session_save_path().'/sess_*') as $file) {
            //if (filemtime($file) + $maxlifetime < time() && file_exists($file)) {
            if (fileatime($file) + $maxlifetime < time() && file_exists($file)) {
                unlink($file);
            }
        }

        return true;
    }
}

使い方

<?php

$handler = new FileATimeSessionHandler();
session_set_save_handler($handler, true);
session_start();