質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Cookie

HTTPにおけるCookieとは、クライアントのウェブブラウザ上に保存された一時的なデータを指します。クライアント側のJavaScriptでも、サーバー側のHTTPヘッダーでもクッキーの読み書き・修正・削除が可能です。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

12223閲覧

phpでブラウザを閉じてもsessionを終了させない方法

callmichael

総合スコア71

Cookie

HTTPにおけるCookieとは、クライアントのウェブブラウザ上に保存された一時的なデータを指します。クライアント側のJavaScriptでも、サーバー側のHTTPヘッダーでもクッキーの読み書き・修正・削除が可能です。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

1グッド

3クリップ

投稿2016/06/16 01:31

以前、下記の質問をさせていただきました。

phpでのセッション認証について

こちらで教えていただいたことをもとに、ログイン処理をセッション認証で行うことができました。
そこで、1つ疑問に思ったことがあります。

上記のページに記載されているような方法でログイン処理を行った場合に、
ブラウザを閉じたタイミングでログイン状態が失われてしまいます。
セッションについて詳しくないもので、
一般的にセッション認証の場合はブラウザを閉じると、
ログアウトしてしまうものなのでしょうか?

また、セッションIDを自分でCookieに保存することによって
ログイン状態が維持されるのでは、と考えていますが、この方法は一般的でしょうか?

基礎的な部分で、ウェブ上に情報があるかもしれませんが、
上記の疑問が解決されるページを見つけることができませんでした。

お手数ですが、ご教授いただけると幸いです。
よろしくお願いいたします。

mpyw👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

例の記事をまた貼ります.

なお,セッションの延長を許可する実装にする場合,ログインから何分が経過したか覚えておき,一定時間を超過していたらsession_regenerate_idを実行すべきだと思います.

改良版を載せておきます.

php

1function extensible_session_start($lifetime = 0, $updatetime = 1440, $name = null) 2{ 3 ini_set('session.gc_maxlifetime', $lifetime); 4 session_set_cookie_params($lifetime, '/', '', false, true); 5 if ($name !== null) { 6 session_name($name); 7 } 8 $name = session_name(); 9 if (isset($_COOKIE[$name])) { 10 if (!ctype_alnum($_COOKIE[$name])) { 11 unset($_COOKIE[$name]); 12 } elseif ($lifetime > 0) { 13 setcookie($name, $_COOKIE[$name], time() + $lifetime, '/', '', false, true); 14 } 15 } 16 if (!session_start()) { 17 return false; 18 } 19 if (!isset($_SESSION['__NEXT_UPDATE__'])) { 20 $_SESSION['__NEXT_UPDATE__'] = time() + $updatetime; 21 } elseif ($_SESSION['__NEXT_UPDATE__'] <= time()) { 22 session_regenerate_id(true); 23 $_SESSION['__NEXT_UPDATE__'] = time() + $updatetime; 24 } 25 return true; 26} 27 28extensible_session_start(86400, 900); // 有効期限1日, 更新間隔15分

投稿2016/06/16 01:45

編集2016/06/16 01:48
mpyw

総合スコア5223

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

callmichael

2016/06/16 01:49

度々ご回答いただき、ありがとうございます。 貼っていただいたリンク先について、改めてじっくりと勉強させていただきます。
mpyw

2016/06/16 02:08

ただ,このままだとCSRFトークンの検証失敗がどうしても稀に発生してしまうので,ちゃんとそれも考慮して作りなおした版を後でQiitaに書きます…
callmichael

2016/06/16 05:10

勉強させていただきます!ご丁寧にありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問