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

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

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

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

セッション

Sessionはクライアントがサーバに送ったすべてのリクエストのことを指します。

Q&A

2回答

30216閲覧

セッションの有効期限を設定したら、クッキーの有効期限にも反映される?

re97

総合スコア208

Cookie

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

セッション

Sessionはクライアントがサーバに送ったすべてのリクエストのことを指します。

0グッド

1クリップ

投稿2016/04/27 07:34

セッションの有効期限を例えば3日後ぐらいに設定したら、クッキーの有効期限にも反映されるのでしょうか?
・逆に、クッキーの有効期限を設定しても、セッションの有効期限には反映されない?

「セッションの有効期限」と「クッキーの有効期限」は連動しているのでしょうか?

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

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

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

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

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

guest

回答2

0

まず、クッキーとセッション、それぞれの用語について確認しておきます。

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

unau

総合スコア2468

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

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

0

cookieに有効期限をセットしなければ、セッションの切断と同時に削除されます(連動しているといえる)
cookieに有効期限をセットすれば、セッションが切れても有効期限内はcookieが有効ですので次回セッションでcookieを継続利用できます(連動しない)

投稿2016/04/27 08:52

takito

総合スコア3111

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問