セッション管理には3つがあると述べたが、一番多いのはCookieである。
実際に試してみよう。session
PHPでプログラミングをする場合、以下を書くだけである。

  session_start();

プログラムとしては、以下のようになる。
login.php  ※ポイントのみの最低限に絞っている
<?php
  session_start();
?>

ログイン画面<br>
<FORM ACTION="result.php" METHOD="POST">
ID:<INPUT TYPE="text" NAME="id" VALUE=""><br>
Password:<INPUT TYPE="password" NAME="password" VALUE=""><br>
<INPUT TYPE="submit" VALUE="Login">
</FORM>
sef4 
これだけでCookieが設定されるとは便利ですね。
では、IEの「ツール」「インターネットオプション」「全般」「設定」「ファイルの表示」の中で、Cookieを探してみます。
あれ?無いですよ?
ファイルに保存されるのは、Cookieに有効期限を付けた場合のみだ。通常は、ブラウザを閉じるとCookieは削除されるので、わざわざファイルに保存する必要はない。
 
IEの開発ツールで見てみよう。F12を押して、三角のスタートボタンを押してキャプチャをする。Cookieタブを見ると、以下にようにPHPSESSIDとして確認できる。
cookie
※http:127.0.0.1になっているのは、Webサーバ上から直接アクセスしたため。

では、パケットキャプチャを詳しく見てみよう。
PC(192.168.1.103)からWebサーバ192.168.1.102にアクセスするとする。
http://192.168.1.102/login.php
WebサーバにはPHPのプログラムにて session_start() が記載されているので、ブラウザに対してSet-Cookieにてセッション情報を渡す。(上の図の②)
このとき、②のフレームが以下である。http









Webサーバからブラウザに対し、Set-CookieにてセッションIDが渡されているのが分かる。
その後、ブラウザからWebサーバへの通信(上の図の③)へは、以下のようにCookieのセッションIDを伝えながら通信をする。これにより、セッションを維持しながらの通信が可能になる。
session2
情報セキュリティスペシャリスト試験を目指す女性SE

【ポイント!】
WebサーバはHTTPヘッダのSet-Cookie(HTTPレスポンス)、クライアントはCookie(HTTPリクエスト)にCookie情報を入れて通信

今回はPHPの場合を紹介したが、Java Servletの場合は以下。

  HttpSession session = request.getSession(true);

以下にまとめられているので参照ください。
https://www.ipa.go.jp/security/awareness/vendor/programmingv2/contents/303.html

参考1
過去問(H23SC春午後2問2)に、「利用者がパスワードを入力してログインすると, Set-CookieヘッダでセッションIDをブラウザに対して発行するようになっている。それ以降はセッション管理にこのセッションIDを利用するとともに, SSLによる通信の暗号化が図られている」とある。

参考2
Cookieの場所であるが、最近のIEでは「ツール」「インターネットオプション」「全般」「設定」「ファイルの表示」の中にある。他のテンポラリーファイルも混ざっているので見づらいが、よく探せばあるので、見ていただきたい。
cookie