sessionのgcはどんな動きをするか

<?php
/**
 * session gc test
 *
 * セッションに値が入っている場合は、session_startのタイミングでtimestampが更新されていく
 * セッションが空の場合は、session_startしてもtimestampは作られたときのまま
 *
 * セッションに値が入っている場合
 * -gc2.php?init= でセッションに値を格納
 * -gc2.php?PHPSESSID=のリンクをクリックすると、atime、ctime共に更新される
 * -gc2.phpを呼び出すと、上記セッションにアクセスしないので、gc送りのカウントダウンが始まる
 * -続けてgc2.phpを呼び出す。
 * -gc_maxlifetimeが過ぎた時点で上記セッションはgc対象になる
 * -gc_probability / gc_divisor (1/3) の確率でgcが起動し、上記セッションファイルが消される
 *
 * セッションに値が入っていない場合
 * -gc2.phpでアクセス
 * -gc2.php?PHPSESSID=のリンクをクリックしてもatime,ctimeが更新されない
 * -作成された時点からgc送りのカウントダウンは始まっている
 * -gc_maxlifetimeが過ぎた時点で上記セッションはgc対象になる
 * -gc発動とともに削除される
 */
ini_set ( "session.use_trans_sid", 1 );
ini_set ( "session.use_cookies", 0 );
ini_set ( "session.use_only_cookies", 0 );
ini_set ( "session.gc_maxlifetime", "5" );
ini_set ( "session.gc_probability", "1" );
ini_set ( "session.gc_divisor", "3" );
session_start();
if (isset($_GET['init'])) {
    $_SESSION['time'] = date("Y-m-d h:i:s");
}
print '<p><a href="gc2.php">gc2.php</a></p>';
print '<pre><code>';
$files = scandir(session_save_path());
print "now: " . date('Y-m-d h:i:s') . "\n";
foreach($files as $file) {
    if (preg_match("/^sess_/", $file) !== 1) {
        continue;
    }
    $file = session_save_path() . "/" . $file;
    print $file . "\n";
    print "atime: " . date('Y-m-d h:i:s', fileatime($file)) . "\n";
    print "mtime: " . date('Y-m-d h:i:s', filemtime($file)) . "\n";
    if (isset($_SESSION['time'])) {
        print $_SESSION['time'] . "\n";
    }
    print "\n";
}
print '</code></pre>';


参考になるので