トップへ(mam-mam.net/)

PHPの標準セッションについて | $_SESSION変数

PHPの標準セッションについて | $_SESSION変数

PHPの標準セッションでは
セッションをファイル(/var/lib/php/session/sess_セッション名、C:\Windows\Temp\sess_セッション名 など)に保存します。
セッションを開始 session_start(); すると $_SESSION 変数が使えるようになり、セッションが有効な間は値が保持されます。
セッションを破棄するには session_destroy(); を使用します。

php.iniでのセッション設定

php.iniでは以下3つのセッション設定があります。

session.gc_maxlifetime = 1440
session.gc_probability = 1
session.gc_divisor = 100
session.gc_maxlifetime
セッションファイルの「最終更新時刻」がこの値(秒)以上経過したら、確率(gc_probability / gc_divisor ×100 %)でセッションファイルが削除される。
session.gc_probability / gc_divisor
session.gc_probability / gc_divisor × 100(%)の確率でセッションファイルが削除される。

phpのソースコードでphp.ini設定を無視してセッションファイルを更新しなくても必ず1時間消されないようにするには以下のようにセッション開始前に設定する。

ini_set('session.gc_maxlifetime', 3600);
session_start();

セッションファイルを更新するにはセッション変数を設定するか変更すれば良い。

session_start();

if (!isset($_SESSION['last_access'])) {
    $_SESSION['last_access'] = time();
}

if (time() - $_SESSION['last_access'] > 3600) {
    session_destroy();
    // ログアウト処理
}

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

セッションIDの更新

セッションハイジャックを防ぐために定期的にセッションIDを更新(古いセッションIDの削除と新しいセッションIDの生成)するには以下を実行します。
ログイン直後や権限変更、ユーザー登録などセキュリティ関連の動作後にセッションIDを更新するのが望ましいようです。

session_regenerate_id(true);

PHPサンプル集一覧へ