Q&A
セッションの有効期限を例えば3日後ぐらいに設定したら、クッキーの有効期限にも反映されるのでしょうか?
・逆に、クッキーの有効期限を設定しても、セッションの有効期限には反映されない?
「セッションの有効期限」と「クッキーの有効期限」は連動しているのでしょうか?
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
下記のような質問は推奨されていません。
- 質問になっていない投稿
- スパムや攻撃的な表現を用いた投稿
適切な質問に修正を依頼しましょう。
回答2件
2
まず、クッキーとセッション、それぞれの用語について確認しておきます。
HTTP というプロトコル自体にはセッションという概念はありません。HTTP はステートレスです。つまり、同じクライアントからの同じサーバへの一連のリクエストもすべて一回一回別のものとして扱われます。
しかし、一連のリクエストを関連づけたものとして、すなわち、「セッション」として扱いという要望はあります。じゃあ、なんとかして個別のリクエストを関連づけて「セッション」を実現しよう、ということになります。この時点で、「セッション」と「クッキー」には直接的な関係がないことをご理解ください。
たとえば、HTTP 認証(BASIC 認証や Digest 認証) をかけてあれば、毎回ユーザ情報が送られてきますので、セッションを実現できます。あるいは、ページ遷移の際のクエリストリングに毎回ユーザ ID をつけるような仕様にしておけば、セッションを実現できます。
次にクッキーについて。
クッキーは、サーバから「次にうち(のこのドメイン)にアクセスするときにはこの文字列を送ってきてね」と依頼し、クライアント(ブラウザ)もそれに同意すれば覚えておいて、そのサーバにリクエストする際に毎回送る、そういう文字列です。サーバから有効期限を指定することもできて、ブラウザ側が同意すればファイルに書き込んだりして、ブラウザを終了したとしても次に起動して再度そのサーバにアクセスしたときに有効期限内のクッキーを送るようになります。
クッキーの利用方法としては、もちろんセッションもありますが、それだけではありません。ユーザのトラッキングにも使えます。
さて、ようやく「クッキー」を用いた「セッション」の実現の話です。
今まで説明したクッキーの説明からわかるかと思いますが、クッキーはセッションの実現に向いています。
もっとも素朴なセッションの実現方法は、セッションを通じて利用する情報を、一切サーバに保存せず、必要な情報はすべてクッキーとして毎回サーバから送り、毎回クライアントから戻す、というものが考えられます。
しかし、これだと毎回必要な情報をすべて持ちまわる必要がありますし、平文でやりとりしますので傍受されますし、サーバに何も保存していないのでなりすましもできてしまいます。
ということで、多くの WEB アプリケーションでは、サーバ内にセッション情報を管理した領域を持ち、その識別にセッション ID を発行し、セッション ID だけをクライアントに送ります。クライアントからクッキーで送られてくるセッション ID からセッション情報を検索し、一連のリクエストで共有するデータを取得します。多くの WEB フレームワークが採用している「セッション」の仕組みがこれです。 (PHP の場合は言語処理系自体がこういう機構を組み込んだ WEB フレームワークと言える)
質問に戻りましょう。
「セッションの有効期限」については、「セッション」の実現方法が何か、ということを決めないと何とも言えないわけですが、先ほど説明した一般的な WEB フレームワークにおける実現方法だという想定で先に進みます。
「セッションの有効期限」は、サーバ側で保存している「セッション情報」をいつまで有効なものとしておくか、というクライアントには一切関係ない、サーバ側だけの話です。たとえば、サーバ側でセッションの有効期限を最終リクエストから 5 分、と決めていた場合、クライアント側が最終リクエストから 6 分経ってから (クッキーで) セッション ID を送っても、「そんなセッションはないよ」ということになります。
クッキーの有効期限については先に述べました。
セッションの有効期限を定めたときにクッキーの有効期限に反映されるか、は、WEB フレームワークの実装に依存します。たぶん、連動するんじゃないかと思いますけれども。
セッションの有効期限が先に切れた場合、ブラウザは有効期限内であるクッキーに含まれているセッション ID を送ってきますが、そのセッションはもうサーバで無効となっているので、違うセッションを始めるしかない、という話は先にしました。なので、連動してないと困りますよね。
クッキーの有効期限が先に切れた場合は、「もしサーバに送ったらまだ有効だったセッションのセッション ID」を送らなくなる、ということになります。サーバ側としてはセッション ID なしのリクエストが来た、ということになりますので、必要に応じて新たなセッションを開始することになります。通常、WEB フレームワークではセッションの有効期限は全体で一括して決めている (でないと実装が面倒) と思いますので、セッション ID の入ったクッキーの有効期限を後から変更した場合でも、セッション自体の有効期限は連動して変わったりしないと思います。
投稿2016/04/27 12:54
総合スコア2468
0
cookieに有効期限をセットしなければ、セッションの切断と同時に削除されます(連動しているといえる)
cookieに有効期限をセットすれば、セッションが切れても有効期限内はcookieが有効ですので次回セッションでcookieを継続利用できます(連動しない)
投稿2016/04/27 08:52
総合スコア3107
下記のような回答は推奨されていません。
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
このような回答には修正を依頼しましょう。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
関連した質問
Q&A
受付中
「unknown error: DevToolsActivePort file doesn't exist」を解決したい
回答1
クリップ0
更新
2022/12/28
Q&A
受付中
同ブラウザ、別タブでそれぞれセッション管理がしたい
回答1
クリップ1
更新
2022/01/12
Q&A
解決済
【PHP】作成したメールフォームに脆弱性がないか、アドバイスもらえないでしょうか。
回答4
クリップ41
更新
2017/04/11
Q&A
解決済
エラーメッセージSQLSTATE[42000]の原因が分かりません
回答1
クリップ0
更新
2017/07/31
Q&A
解決済
なぜconstを使っているのかわかりません
回答3
クリップ1
更新
2023/05/04
Q&A
解決済
Google Colab 上で Selenium の Webdriver が動かなくなった(Ubuntu 20.04 対応?)
回答1
クリップ0
更新
2023/01/20
Q&A
解決済
Twitter API v2を使ってログインユーザーがツイートを投稿できるようにしたいです。
回答1
クリップ0
更新
2023/05/12
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。