1.HTTPの基本
(1)HTTPリクエストのメッセージ構成
以下の構成になっています。
項目 | 概要 | |
---|---|---|
❶ | リクエスト・ライン | POSTやGETなどのメソッドを記載 |
❷ | ヘッダ | Gookieなどはここに記載 |
(空白行) | ||
❸ | メッセージ・ボディー | POST時にはパラメータ(例:userid=user1)が記載されるが、GETのときは特になし |
以下に詳細の解説があります。
https://xtech.nikkei.com/it/article/COLUMN/20080516/302045/
1.Cookieによるセッション管理
(1)Cookieの概要
❶Cookieについて
Cookieについては以下に詳しく説明されています。
https://qiita.com/7968/items/ce03feb17c8eaa6e4672
❷Cookieの確認
Cookieはファイルの保存する場合と、メモリに保存する場合があります。今回のようなセッション管理の場合、メモリに保存されるだけなので、ブラウザやファイルなどには保存されません。F12を押してデベロッパーツールで確認するか、Wiresharkでパケットキャプチャをして確認しましょう。
❸Cookieの削除
ブラウザを閉じると、消えると思います。
ファイルに保存されている場合、Chromeの場合、右上の3点のマークから、「設定」「プライバシーとセキュリティ」「閲覧履歴データの削除」「Cookieと他のサイトデータ」
(2)セッション管理の仕組み
以下にサンプルプログラムがあるので、動かしてみましょう。
https://codelikes.com/php-session/
上記のサンプルプログラムで、順番に動作させてみましょう。
Wiresharkでパケットをキャプチャすることをお勧めします。※必要に応じて、「新しいシークレットウィンドウ」で開くと、Cookieが真っ新なページを開くことができます。
❶login.html に接続
HTTPリクエストにCookieが無いことを確認します。
❷user1でログインします。
ユーザ名は何でもいいのですが、user1、パスワードはpassとしました。
ログインすると、home.phpにリダイレクト(302)されます。このとき、Set-Cookieにて、セッションとなるPHPSESSIDが払い出されます。
❸home.phpに接続
利用者のブラウザは、home.phpに接続するのですが、このとき、Cookieによるセッション情報を保持します。
HTTPリクエストヘッダに、CookieとしてPHPSESSIDが記載されていることが確認できます。
皆さんも試してみてください。
(3)上記のプログラムで、いろいろやってみよう
ブラウザで、Cookieを確認しましょう。F12を押して開発者ツールを起動します。アプリケーションタブ(英語の場合はapplicationと表示)で、先ほどのCookieの値が確認できることでしょう。
❶Cookieを削除しましょう。
開発者ツールでは、Cookieを書き換えることができます。違う値に書き換えて、F5でページをリロードしてみましょう。「○○さん、」の部分はどうなりましたか?
❷Cookieを他のセッションに変えてみましょう
ブラウザを立ち上げ、別のユーザであるuser2を作成してみましょう。そのユーザのCookieを確認し、先ほどのCookieのセッションIDに書き換えてみましょう。
セッションを乗っ取り、user2を表示することができましたか?
❸どこでセッションを管理しているか
セッション情報は、サーバのどこで管理されているか、ファイルのありかを探すと、/var/lib/php/sessionであることがわかります。
そこで先ほどのセッションIDのファイルを開くと、user1という情報が確認できます。
※chmod o+x+r -R /var/lib/php/session/で権限付与しています。
# grep -r "session.save_path" /* /etc/httpd/conf.d/php.conf:php_value session.save_path "/var/lib/php/session" # pwd /var/lib/php/session # cat sess_8ein46cifsqgegft4hhscvb687 userId|s:5:"user1";count|i:0