質問: 以前、下記の質問をさせていただきました。 phpでのセッション認証について こちらで教えていただいたことをもとに、ログイン処理をセッション認証で行うことができました。 そこで、1つ疑問に思ったことがあります。 上記のページに記載されているような方法でログイン処理を行った場合に、 ブラウザを閉じたタイミングでログイン状態が失われてしまいます。 セッションについて詳しくないもので、 一般的にセッション認証の場合はブラウザを閉じると、 ログアウトしてしまうものなのでしょうか? また、セッションIDを自分でCookieに保存することによって ログイン状態が維持されるのでは、と考えていますが、この方法は一般的でしょうか? 基礎的な部分で、ウェブ上に情報があるかもしれませんが、 上記の疑問が解決されるページを見つけることができませんでした。 お手数ですが、ご教授いただけると幸いです。 よろしくお願いいたします。
回答: 例の記事をまた貼ります. * 有効期限ってどうなってるの? * 有効期限を長くするにはどうすればいいか? なお,セッションの延長を許可する実装にする場合,ログインから何分が経過したか覚えておき,一定時間を超過していたら`session_regenerate_id`を実行すべきだと思います. 改良版を載せておきます. ``` function extensible_session_start($lifetime = 0, $updatetime = 1440, $name = null) { ini_set('session.gc_maxlifetime', $lifetime); session_set_cookie_params($lifetime, '/', '', false, true); if ($name !== null) { session_name($name); } $name = session_name(); if (isset($_COOKIE[$name])) { if (!ctype_alnum($_COOKIE[$name])) { unset($_COOKIE[$name]); } elseif ($lifetime > 0) { setcookie($name, $_COOKIE[$name], time() + $lifetime, '/', '', false, true); } } if (!session_start()) { return false; } if (!isset($_SESSION['__NEXT_UPDATE__'])) { $_SESSION['__NEXT_UPDATE__'] = time() + $updatetime; } elseif ($_SESSION['__NEXT_UPDATE__'] <= time()) { session_regenerate_id(true); $_SESSION['__NEXT_UPDATE__'] = time() + $updatetime; } return true; } extensible_session_start(86400, 900); // 有効期限1日, 更新間隔15分 ```