LoginSignup
7
10

More than 5 years have passed since last update.

Cookieの有効期限を設定する

Posted at
  1. 実行時設定を更新する

    // 有効期限を20分
    ini_set('session.gc_maxlifetime', 1200);
    ini_set('session.cookie_lifetime', 1200);
    

    サーバーとクライアントの時刻が異なると、ブラウザーによっては有効期限が意図したとおりに設定されない。
    上記設定のとき

    ブラウザ Cookieの有効期限(Expires)
    firefox、Chrome クライアント時刻+20分
    IE8 サーバー時刻+20分。
    有効期限がクライアント時刻より古いときはCookie自体が保存されない。

    バージョンにより有効期限の設定方式が変わる可能性あり

  2. サーバー側のセッションで有効期限を管理する

    sample
    if (isset($_SESSION['LAST_ACTIVITY']) && (time() - $_SESSION['LAST_ACTIVITY'] > 1800)) {
    // 最終リクエスト時刻から30分経過した
    session_unset();     // unset $_SESSION variable for the run-time 
    session_destroy();   // destroy session data in storage
    }
    $_SESSION['LAST_ACTIVITY'] = time(); // 最終リクエスト時刻を更新
    

How do I expire a PHP session after 30 minutes?

Cookieを意図的に破棄する方法はこちらで丁寧に解説

[PHP] リクエストパラメータ・セッションに関するまとめ
セッションを破棄させるにはどうしたらいいか?

# サーバー側で保管しているセッションを破棄
$_SESSION = array();
session_destroy();

# クライアントのCookieを破棄(有効期限を過去日にする)
# (サーバー時刻が進んでいるとIE8では破棄されないかも)
$sess_name = session_name(); // php.iniのデフォルトは 'PHPSESSID'
if (isset($_COOKIE[$sess_name])) {
    setcookie($sess_name, '', 1, '/');
}
7
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
10