猫型iPS細胞研究所

Windows、Linux、iOS、DB、Network

未分類

「Cookie」と「セッション」と「セッションCookie」の違い

投稿日:2013年7月18日 更新日:

セッションという日本語のイメージこそ、最も注意すべき点です。
WEBサーバーとブラウザの間には、トンネルのような物理的な接続状態は存在しません。
一回ポッキリのデータのリクエスト・レスポンスしかHTTPには存在しないのです。

Cookieとセッションの違い

ID・パスワードなど別の画面に遷移しても必要なデータは多々あります。
こうした場合によく使用されるのが、Cookieやセッションです。

CookieはWEBサーバーが発行し、ブラウザが保持するキーと値です。
ブラウザは同じサイトにアクセスする際にはそのCookieをWEBサーバーに送信します。
WEBサーバーはブラウザからのリクエスト毎にその値を参照することができます。

一方セッションはWEBサーバーで保持するキーと値です。

IDやパスワードなどを毎回ブラウザから送信してはセキュリティ的にも問題です。
ログインアクションにより、WEBサーバー側ではセッションとして値を保持し、ブラウザへはCookieを送信します。
ブラウザから再度アクセスがあれば、送信されたCookie情報をもとにWEBサーバーは対応するセッション情報があるかを判断すればよいのです。

Cookieはブラウザに保存され、セッションはWEBサーバーに保存されるという点が重要です。
どちらもキーと値をもつデータ(=ファイル)にすぎません。

CookieとセッションCookieの違い

Cookieはブラウザで保持していると言いました。
具体的にはファイルとして保持しているので簡単に参照できます。

セッションCookieもブラウザが保持しています。
しかしファイルではなく、メモリーに保持しています。

そのため、セッションCookieはブラウザを閉じれば破棄するようにできます。
ファイルに保存されるCookieにも有効期限はありますが、ブラウザを閉じてもなくなりません。

一度ブラウザを閉じれば、再度ログイン画面に戻ると言った動きに使用できます。

確認方法

Cookieはブラウザが保存しているファイルですので簡単です。
XP:\Documents and Settings\(ユーザー名)\Cookies
Vista:C:\Users\(ユーザー名)\AppData\Roaming\Microsoft\Windows\Cookies
にありますし、中身も簡単にみれます。

セッションCookieも簡単です。
ブラウザのアドレス欄に

javascript:document.cookie;

と入力してみてください。
もしそのサイトでセッションCookieを使用していれば確認できます。
ただしこの方法では普通のCookieかセッションCookieかの判別は簡単にはできません。
Cookieファイルにない情報が送信されていればそれがセッションCookeiです・・・ :x001:

最後にセッションの情報です。
これはサーバー側にあるので開発者しか分かりません。
phpの場合はデフォルトでは
/var/lib/php/session
にファイルとして保存されています。

あとがき

セッション情報はサーバーにファイルとして保存されています・・・。
ということは!複数WEBサーバーで負荷分散している場合、別のWEBサーバーにアクセスすればセッションはありません。
ロードバランサーで負荷分散している場合には十分注意が必用です。

一つの解決策として、それぞれのWEBサーバーにセッション情報を保存するのではなく、データべースにセッション情報をもつということが考えられます。

また、ブラウザを閉じた場合に再度ログイン画面に戻すことはセッションCookieで実現できます。
しかし、戻るボタンを押した場合にエラーや不正なページ遷移として処理するにはどうすればいいのでしょうか・・・。
おそらくブラウザのキャッシュをOFFにするしかないでしょう。

WebではセッションやCookieはWEBでは重要な存在ですので、十分検討してから開発しましょう。

Gooleアドセンス用336

Gooleアドセンス用336

-未分類
-,

執筆者:

関連記事

CakePHPでセッションとクッキーの有効期限を設定する

./Config/core.phpを下記のようにすると ブラウザの保存するクッキーは有効期限0で、ブラウザを終了すればなくなります。 一方データベースに保存するセッション情報は15分でなくなるので、 …

CakePHPで簡単なjavascriptのサンプル

Viewに記述するだけの簡単なサンプルです・・・ ・・・ echo ‘<div class="submit"></div></form>’; ? …

CakePHP findでMySQL関数を使用したい

たとえばMySQLのconcatを使用して文字列を結合したいとします。 $data = $this->Company->find(‘list’, array( ‘fields’=>a …

CakePHPのlayoutを指定する

ログイン画面ではメニューが不要であったりと、 レイアウトを変更したい場合はコントローラーのアクションで以下のように指定します。 View/Layout/配下に作成したレイアウトを指定すればよいのですが …

asp

IIS(ASP.NET)ではネットワークドライブの割り当てを使ってはいけない

以前「タスクタスクスケジュールではネットワークドライブの割り当てを使ってはいけない」 という記事を記載したが、ASP上でも同じことが言えます。 ASPも実行するのがログインしているユーザーとはことなり …