猫型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

-未分類
-,

執筆者:

関連記事

asp

IISの設定

Visual StudioでLocalに配置したサイトが、ブラウザで表示できず、下記エラーが表示された場合の対処法です。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ …

CakePHP query時のキャッシュをオフにする方法

Controllerのアクション内で 更新とSELECTをループすると正常な値が取得できません。 それはCakePHPがキャッシュを見てしまうからです。 キャッシュをオフにするには、 第二引数をfal …

CakePHPからphpスクリプトをバックグラウンドで起動する

時間のかかる処理がある場合、 phpスクリプトをキックするだけで画面ではレスポンスを返したい場合があります。 app/Console/Command/text.php に実行したいphpスクリプトを置 …

QdsmtpをAUTH LOGINに対応させる

Qdsmtpを使用して以下のようなエラーがでることがあります。 QdSmtp error: HOST:sysmail.ipsism.co.jp doesnot suppoted MY Abalable …

CakePHPでSQLを直接実行する

正直find等を使用するのは面倒です。 SQLを直接実行するには以下のようにします。 $sql=’select count(*) as cnt, referer from acls where con …