セッションという日本語のイメージこそ、最も注意すべき点です。
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では重要な存在ですので、十分検討してから開発しましょう。