-
実行時設定を更新する
// 有効期限を20分
ini_set('session.gc_maxlifetime', 1200);
ini_set('session.cookie_lifetime', 1200);
サーバーとクライアントの時刻が異なると、ブラウザーによっては有効期限が意図したとおりに設定されない。
上記設定のとき
|ブラウザ|Cookieの有効期限(Expires)|
|:--|:--|
|firefox、Chrome|クライアント時刻+20分
|IE8|サーバー時刻+20分。<BR>有効期限がクライアント時刻より古いときはCookie自体が保存されない。|
__※__バージョンにより有効期限の設定方式が変わる可能性あり
1. サーバー側のセッションで有効期限を管理する
```php: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(); // 最終リクエスト時刻を更新
Cookieを意図的に破棄する方法はこちらで丁寧に解説
[PHP] リクエストパラメータ・セッションに関するまとめ
セッションを破棄させるにはどうしたらいいか?
# サーバー側で保管しているセッションを破棄
$_SESSION = array();
session_destroy();
# クライアントのCookieを破棄(有効期限を過去日にする)
# (サーバー時刻が進んでいるとIE8では破棄されないかも)
$sess_name = session_name(); // php.iniのデフォルトは 'PHPSESSID'
if (isset($_COOKIE[$sess_name])) {
setcookie($sess_name, '', 1, '/');
}