Cookieとセッションについて
詳しい説明・正確な内容等は他サイトなどを見てください。このページは「ざっくりしたコトさえ分かればOK」って内容です。
Cookieとセッション
- Cookie(クッキー) ー ブラウザで情報を持つ仕組み
- セッション – サーバで情報を持つ仕組み
※「セッション」は「仕組み」じゃなくて「概念」らしいが詳しくは知らない。
「Cookieはブラウザを再起動しても使える」「セッションはブラウザを再起動すると使えない」という認識だったんだけど違うっぽい。
Cookieは2種類
そもそも「Cookie」って言うけど2種類あるそうだ。
- Persistent Cookie(パーシステントCookie) – ブラウザ再起動しても使える。
- Session Cookie(セッションCookie) – ブラウザ再起動すると使えない。
よく聞く「Cookie」は「Cookieはブラウザを再起動しても使える」というヤツなんで「パーシステントCookie」に当たるっぽい。
ちなみにはブラウザを閉じたタイミングで「Cookie」を破棄させることも可能。
ココが・・・言葉遊び的な感じで理解しづらい。下記のどっちなんだろう?
- 「ブラウザを閉じた」タイミングで「Cookie」を「破棄する = セッションCookie」「破棄しない = パーシステントCookie」
- 「パーシステントCookie」と「セッションCookie」はまったくの別物で「パーシステントCookie」も設定次第で「ブラウザを閉じたらCookieを破棄」が可能
とりあえず「ブラウザを閉じたら破棄する・しない」は設定次第というコトだそうだ。
また、モバイル端末によっては「Cookie」が使えないコトもあるそうだが「セッションCookie」も使えないのかどうかは未調査。
セッション
「セッション」は大きく分けて2つのデータ?仕組み?がある。
- サーバに保存するデータ
- 「サーバに保存したデータ」を取り出すための「キー」になるデータ
「サーバに保存したデータ」を取り出すための「キー」
- POSTデータ
- GETデータ
- Cookie
※よくあるのが「セッションCookie」を使って「セッション情報」を取り出すってヤツ。
ちなみに「キー」は何かの情報をハッシュ化した値。
「適当な文字列でいいんじゃないの?」と思うんだけどセキュリティ的にダメだそうだ。
セッションの有効期限
「セッションはブラウザを再起動すると使えない」と思ってたけど違うらしい。
設定次第で変更可能だそうだ。
「有効期限を指定しない(or 「0秒」の場合)」と「ブラウザを閉じると破棄」となるらしい(PHPの場合。他言語は未調査)
※ココでいう「セッション」は「サーバに保存したデータ」になり、「サーバに保存したデータ」を取り出すための「キー」は関係ない。
持たせる情報
「Cookie」「セッション」に「何を持たせるんだ?」って感じなんだけど一時的な情報・・・たとえば「ログイン中ですよ」や「買物カゴに入れた商品情報」とか。
例えばショッピング系のサイトで下記のような流れのとき。
- 「ログイン」する。
- 「本醸造酒」のページで「呉春 丸本 本醸造」を「買物カゴ」に入れる。
- 「純米酒」のページで「嘉美心 特別純米 瓶囲い」を「買物カゴ」に入れる。
- 「清算」のページで清算して終了。
▼持たせる内容
- 「1」でログイン情報を持たせる
- 「2」で商品情報(呉春 丸本 本醸造)を持たせる
- 「3」で商品情報(嘉美心 特別純米 瓶囲い)を持たせる
- 「4」で商品情報(呉春 丸本 本醸造、嘉美心 特別純米 瓶囲い)を取り出して表示
問題は「ログイン情報」を「ブラウザとサーバのどちらに持たせるのか?」ってトコ。ブラウザに「ログイン情報」のような重要な情報を持たせるのは危険だそうだ。
・・・ということで「ログイン情報」のような重要な情報はサーバに持たせようとなっているらしい。
つまりコレがセッションって仕組みになる。
セッションで自動ログイン
ログインが必要なサイトで「ログイン後にブラウザを再起動するとログインされた状態」でアクセス可能ってヤツ(自動ログイン)がある。
通常は「ログイン後にブラウザを再起動するとログアウトされた状態」になる。
自動ログインを実装するなら自動ログインに必要な「キー」を「Cookie」に持たせておくのが多い。
GET・POSTでどうにかするってのもアリかもしれない。
※ココで出てくる「Cookie」ってのが「パーシステントCookie」になるっぽい。