「プロになるためのWeb技術入門」を読んだ。CookieとSession

HTTPはステートレスなプロトコル

httpは状態を持てない。

なら、どうやってログイン状態とかを記憶してるのか?

Cookie

HTTPの仕様を拡張して、WebアプリケーションとWebブラウザの間で情報を交換できるようにしたもの。

流れ

  1. webブラウザからリクエストを送る(ログイン情報とか商品情報とか)

  2. webサーバからwebブラウザへ、HTTPのレスポンス・ヘッダーを利用して小さな情報を送る。 「名前 = 値」の組み合わせで表す。これがCookie
    この時、webアプリケーションで、Cookieにどんな情報をいれるかを決める。

  3. webサーバからCookieを受け取ったwebブラウザは、次回同じwebサーバにアクセスする際、受け取ったCookieをそのままHTTPリクエスト・ヘッダに入れて返す。

  4. webアプリケーション側で、リクエスト・ヘッダに入っているCookieを調べることで。アクセスしてきた相手がどのような相手なのかを知る。


Cookieを受け取ったwebサーバと異なるwebサーバに対しては、Cookieを送れない。

Session

Cookieだとツールを使ったりして丸見えなので、より安全に多くの情報を保持するための方法がSession。

処理の進行状況を管理

ログインして〜
商品をついかして〜
注文内容を確認して〜

みたいな、一連の処理の流れのことを 「Session」 と呼ぶ。

Sessionの状態をどこに保持するか

銀行の受付番号みたいに、 SessionID として Cookieを利用して保持 する。

流れ
  1. webブラウザからリクエストを送る(ログイン情報とか商品情報とか)

  2. webサーバがSessionIDを発行して、HTTPレスポンスのCookieへ格納してクライアントへ渡す。

  3. クライアントは、それ以降のリクエストのときに、SessionIDを格納したCookieをサーバーへ送る。

  4. サーバはCookieからSessionIDを取り出して、それを元にメモリ上にもっているクライアントの状態(ログイン状態やカートの中身)を復元する。


PHPだとこんな感じでSessionを格納する。

// セッション開始
session_start();
        
// セッション変数にユーザ名を格納する
$_SESSION['user'] = $_POST['user'];

SessionIDから、ユーザー名とかを識別して、クライアントに返す。


感想

これもしているようで、はっきりしてなかった。 やっと自信もって人に話せるくらいに理解できかな。