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

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

ただいまの
回答率

90.48%

  • Cookie

    189questions

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

  • セッション

    96questions

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

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

受付中

回答 2

投稿

  • 評価
  • クリップ 1
  • VIEW 7,909

re97

score 195

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

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 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 の入ったクッキーの有効期限を後から変更した場合でも、セッション自体の有効期限は連動して変わったりしないと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 90.48%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    $_SESSIONに値を保持したい

    PHPでセッションを使用してデータを保持したいと思うのですが、何故かうまくいきません。PHPでは$_SESSIONにキーと値を指定すればセッションを使用できると思ったのですが、何か

  • 解決済

    セッション固定攻撃について

    セッション固定攻撃は、どのような方法で攻撃してくるのでしょうか? 対策をしたいので、攻撃方法と対策方法を教えていただけないでしょうか?

  • 解決済

    セッションハイジャックの対策方法について

    セッションを利用する場合のセキュリティ対策についてで、PHPの セッションでは、セッション名とセッションIDさえわかれば、セッション ハイジャックが可能だと聞きました。 それで、

  • 解決済

    Zend Frameworkでセッション失効時間を知りたい(PHP)

    Zend Frameworkで、SESSIONが失効するまでの時間を確認する方法はありますか? セッションの有効期限を設定する方法は、公式マニュアルに書いてあったので解るのですが

  • 解決済

    配列をセッション変数にする方法は?(PHP)

    PHPで配列をセッション変数にすることは可能ですか? こちらの状況としては下記にようになっています。 今あるテーブル(ページ1)のセルの中に違うページに飛ぶリンクが入っています

  • 解決済

    suとsudoコマンドの違いはなんですか?

    Linxuの勉強中の初心者です。 root権限になるために、suもしくはsudoを使うと思うのですが、これらの違いって なんなのでしょうか? 初心者のため2つある意味がわかりません

  • 解決済

    PHPのsession_start()について

    PHPで、セッション変数を作成する時に、session_start()関数を使いますが、 作ったセッションにアクセスする時、違うページでまたsession_start()を呼び出す

  • 受付中

    PHP SESSION破棄のタイミングについて

    PHPを勉強中です。SESSION破棄についてお尋ねしたいです。 下記のソースコードをCentOSのFireFoxから見てみると、 $_SESSION["numbers"]

同じタグがついた質問を見る

  • Cookie

    189questions

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

  • セッション

    96questions

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