cookie(クッキー)、session(セッション)、あとついでにDB
どうした
Webエンジニアとしてクソなのでcookieとsessionの使い分け方がよくわかんない
調べた
概念としての(webでいうところの)session
WWWサービスで使用されるHTTPでは、request(リクエスト)単位で処理が行われる。
sessionは、ユーザがwebサービスの利用を開始してから終了するまで(これは初回アクセスからブラウザを閉じるまでであったり、ログインしてからログアウトするまでであったり)の複数のrequestをまとめた単位であるように見える。
見えると書いたのは、ブラウザやwebサービスによってsessionの定義は異なるようだから。
sessionの管理(同一session単位内のrequestであることの特定・データの持ち越し)は、cookieを用いたクライアント側に保存する方法と、cookieではsession名とsession識別子を扱いサーバ側のsession管理機能を使用する方法がある。(その他にもやり方はある)
このサーバ側でsessionのデータを管理する方を単に「session」と呼んだりするときもあるので、私にはよくわからなかった。
cookie(クッキー)
クライアント側(ブラウザなど)に保存されるデータ。
基本的にrequest headerにのせてサーバへ送信され。response headerにのせてクライアント側に送信される。
その有効期限の指定の有無によって、取扱いを変えるブラウザがある。IEはPersistent cookiesとPer-session cookiesの二種類で扱う。
有効期限が指定されているPersistent cookiesはファイルで保存し、指定のないPer-session cookiesはメモリ上で管理しブラウザを閉じると消えてしまう。
この有効期限の指定のないcookieを、セッションクッキーと呼ぶ人もたまにいる。IEでのCookie設定のところや、firebugでもこのクッキーをセッションクッキーと呼ぶ箇所がある。
ただ、Cookie関係のRFCでは特にそういう呼び方はしていないことや、PHPではsession idを保持しているクッキーをセッションクッキーと呼ぶので、文脈に注意すること。
性質
cookieを使用することで、requestに以前のrequestで得られたデータをのせることができるため、requestとsession単位を紐付けることができる。
ブラウザ側ではブラウザを閉じるまで、サーバ側ではsession idが破棄されるまでなど、クライアント側でいうsession単位と、サーバ側でいうsession単位の考え方が異なることに注意。
最終アクセス日時を表示したり、掲示板のユーザ名を保存しておく軽い感じの使い方(消えてもいいし、ユーザで改変してもサービス側に不利益がない)
後述するサーバ側の機能としてのsessionは、クライアント側からsession idを貰う必要があるため、session idの保存は主にこのcookieで行われる。(サービス内のリンクのURLのパラメータなどにも入れることも可能だが、さらに容易に改変できる上URLが長くなるのでcookie使わない縛りでもない限りやらない)(WebStorageで保存している例はあるのだろうか)
session(セッション)
ここではサーバのsession管理機能について書く。
概念としてのsessionを取り扱うために、cookieを使用
サーバ側に保存されるデータであり、メモリ上に置かれたりmemcacheやredisなどに置かれたりする。
基本的には発行したsession idをクライアント側のcookieにのせ、以降はrequest headerにのっているsession idからクライアントを判別し、そのrequestとsession単位を紐付けることができる。