セッションの有効期限を設定したら、クッキーの有効期限にも反映される?
受付中
回答 2
投稿
- 評価
- クリップ 1
- VIEW 21K+
セッションの有効期限を例えば3日後ぐらいに設定したら、クッキーの有効期限にも反映されるのでしょうか?
・逆に、クッキーの有効期限を設定しても、セッションの有効期限には反映されない?
「セッションの有効期限」と「クッキーの有効期限」は連動しているのでしょうか?
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
+2
まず、クッキーとセッション、それぞれの用語について確認しておきます。
HTTP というプロトコル自体にはセッションという概念はありません。HTTP はステートレスです。つまり、同じクライアントからの同じサーバへの一連のリクエストもすべて一回一回別のものとして扱われます。
しかし、一連のリクエストを関連づけたものとして、すなわち、「セッション」として扱いという要望はあります。じゃあ、なんとかして個別のリクエストを関連づけて「セッション」を実現しよう、ということになります。この時点で、「セッション」と「クッキー」には直接的な関係がないことをご理解ください。
たとえば、HTTP 認証(BASIC 認証や Digest 認証) をかけてあれば、毎回ユーザ情報が送られてきますので、セッションを実現できます。あるいは、ページ遷移の際のクエリストリングに毎回ユーザ ID をつけるような仕様にしておけば、セッションを実現できます。
次にクッキーについて。
クッキーは、サーバから「次にうち(のこのドメイン)にアクセスするときにはこの文字列を送ってきてね」と依頼し、クライアント(ブラウザ)もそれに同意すれば覚えておいて、そのサーバにリクエストする際に毎回送る、そういう文字列です。サーバから有効期限を指定することもできて、ブラウザ側が同意すればファイルに書き込んだりして、ブラウザを終了したとしても次に起動して再度そのサーバにアクセスしたときに有効期限内のクッキーを送るようになります。
クッキーの利用方法としては、もちろんセッションもありますが、それだけではありません。ユーザのトラッキングにも使えます。
さて、ようやく「クッキー」を用いた「セッション」の実現の話です。
今まで説明したクッキーの説明からわかるかと思いますが、クッキーはセッションの実現に向いています。
もっとも素朴なセッションの実現方法は、セッションを通じて利用する情報を、一切サーバに保存せず、必要な情報はすべてクッキーとして毎回サーバから送り、毎回クライアントから戻す、というものが考えられます。
しかし、これだと毎回必要な情報をすべて持ちまわる必要がありますし、平文でやりとりしますので傍受されますし、サーバに何も保存していないのでなりすましもできてしまいます。
ということで、多くの WEB アプリケーションでは、サーバ内にセッション情報を管理した領域を持ち、その識別にセッション ID を発行し、セッション ID だけをクライアントに送ります。クライアントからクッキーで送られてくるセッション ID からセッション情報を検索し、一連のリクエストで共有するデータを取得します。多くの WEB フレームワークが採用している「セッション」の仕組みがこれです。 (PHP の場合は言語処理系自体がこういう機構を組み込んだ WEB フレームワークと言える)
質問に戻りましょう。
「セッションの有効期限」については、「セッション」の実現方法が何か、ということを決めないと何とも言えないわけですが、先ほど説明した一般的な WEB フレームワークにおける実現方法だという想定で先に進みます。
「セッションの有効期限」は、サーバ側で保存している「セッション情報」をいつまで有効なものとしておくか、というクライアントには一切関係ない、サーバ側だけの話です。たとえば、サーバ側でセッションの有効期限を最終リクエストから 5 分、と決めていた場合、クライアント側が最終リクエストから 6 分経ってから (クッキーで) セッション ID を送っても、「そんなセッションはないよ」ということになります。
クッキーの有効期限については先に述べました。
セッションの有効期限を定めたときにクッキーの有効期限に反映されるか、は、WEB フレームワークの実装に依存します。たぶん、連動するんじゃないかと思いますけれども。
セッションの有効期限が先に切れた場合、ブラウザは有効期限内であるクッキーに含まれているセッション ID を送ってきますが、そのセッションはもうサーバで無効となっているので、違うセッションを始めるしかない、という話は先にしました。なので、連動してないと困りますよね。
クッキーの有効期限が先に切れた場合は、「もしサーバに送ったらまだ有効だったセッションのセッション ID」を送らなくなる、ということになります。サーバ側としてはセッション ID なしのリクエストが来た、ということになりますので、必要に応じて新たなセッションを開始することになります。通常、WEB フレームワークではセッションの有効期限は全体で一括して決めている (でないと実装が面倒) と思いますので、セッション ID の入ったクッキーの有効期限を後から変更した場合でも、セッション自体の有効期限は連動して変わったりしないと思います。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
0
cookieに有効期限をセットしなければ、セッションの切断と同時に削除されます(連動しているといえる)
cookieに有効期限をセットすれば、セッションが切れても有効期限内はcookieが有効ですので次回セッションでcookieを継続利用できます(連動しない)
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.35%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる