Cookieとセッションについて

2016/08/26

詳しい説明・正確な内容等は他サイトなどを見てください。このページは「ざっくりしたコトさえ分かれば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. 「清算」のページで清算して終了。

▼持たせる内容

  • 「1」でログイン情報を持たせる
  • 「2」で商品情報(呉春 丸本 本醸造)を持たせる
  • 「3」で商品情報(嘉美心 特別純米 瓶囲い)を持たせる
  • 「4」で商品情報(呉春 丸本 本醸造、嘉美心 特別純米 瓶囲い)を取り出して表示

問題は「ログイン情報」を「ブラウザとサーバのどちらに持たせるのか?」ってトコ。ブラウザに「ログイン情報」のような重要な情報を持たせるのは危険だそうだ。

・・・ということで「ログイン情報」のような重要な情報はサーバに持たせようとなっているらしい。
つまりコレがセッションって仕組みになる。

セッションで自動ログイン

ログインが必要なサイトで「ログイン後にブラウザを再起動するとログインされた状態」でアクセス可能ってヤツ(自動ログイン)がある。
通常は「ログイン後にブラウザを再起動するとログアウトされた状態」になる。

自動ログインを実装するなら自動ログインに必要な「キー」を「Cookie」に持たせておくのが多い。
GET・POSTでどうにかするってのもアリかもしれない。

※ココで出てくる「Cookie」ってのが「パーシステントCookie」になるっぽい。

新着(ニュース関連以外)

2018-07-26
年賀状で「新春」とか書くけど・・・何故なんだろうと8月を目前にした今、疑問に思った。
2018-05-16
PHPで画像のヘッダ情報(?)の「Orientation」を元に画像回転させたい。
2018-03-05
Android Studioをインストール。エミュレータを軽くするトコまで終わらせたかったけど、挫折した。
2018-02-23
プッシュ通知について調べてた時にでてきたServiceWorker。そのServiceWorkerについてのメモ。
2017-12-13
jqueryで取得したDOM要素をオブジェクトじゃなくて、配列で受け取りたい