HTTPの基本の基本2
Cookieとセッション管理について
ステートレスとは何か
- Webサーバがクライアントのアプリケーション状態を保存しないこと
ステートレスでは、クライアントがリクエストメッセージに必要な情報をすべて含めます。そのため、サーバ側はクライアントの状態を覚える必要がないため、サーバ側の処理は非常にシンプルなものになります。サーバは新しく受け取るリクエストの処理に集中すれば問題ありません。
HTTPはステートレスなプロトコルとして設計されており、シンプルなプロトコルゆえの強みを持っています。
HTTP Cookieとは
HTTP Cookieとは、Webサーバよりクライアントに送られる情報の一部で、HTTPヘッダで送信され、「Webブラウザ中」に保存されます。
HTTP Cookieの仕組み
- クライアントがリクエスト
- Webサーバが
Set-Cookie
というフィールドをヘッダに載せて、レスポンスを返す - クライアントはこのCookieをブラウザに保存する
- これ以降、クライアントはサイトにアクセスする際、保存したCookieを自動的にWebサーバにリクエストする(
Cookie
というフィールドに変わります)
前回のブログで記載した通り、HTTPメッセージのヘッダは「名前:値」の形式です。WebサーバはSet-Cookie
の値に、ブラウザに保存して欲しい情報を設定します。
Cookieの有効期限は、デフォルトではブラウザを閉じるまでです。 ただ、ヘッダで有効期限を設定することも可能です。有効期限が切れたCookieはリクエストからも消えます。
Set-Cookie
の値はサーバーが更新して、ヘッダに載せて再度クライアントに返したりします。
HTTP Cookieの種類
HTTP Cookieは2種類に大別されます。
Session Cookieは、インターネットのメールプロバイダを利用する際やオンラインバンクの認証などに使用されています。
別のメールを表示する際などにログインをわざわざしなくていいのは、Sessin Cookieのお陰なのです。ブラウザを終了した時点でこのCookieは破棄されます。
Persistent CookieはSession Cookieに比べると有効期限の長いCookieです。フォーラムなどに1回ログインすると、2週間や場合によっては2ヶ月程ログインなしでアクセスできるのはこのCookieによるものです。
Session Cookieと異なりPersistent CookieはWebブラウザを終了してもWebブラウザ内部に保存されています(※削除できる設定があります)。
セッションについて
セッションとは、接続/ログインしてから切断/ログアウトするまでの一連の操作のことを指し、基本的にクライアントとサーバ間の通信のことです。
例えば、ショッピングサイトにユーザーがアクセスし、商品を探し、カートに入れ、購入するという一連の流れがありますね。
このように同一利用者からのアクセスを関連性のある一連のアクセスとして扱いたい場合、Cookieを使ったセッション管理が行われる。
セッション(管理)の仕組み
Cookieにセッションの情報を乗せることで、セッション管理を行います。
- ユーザーはサイトにログインし、サーバに送信(リクエスト)
- WebサーバはセッションIDを生成し、
Set-Cookie
に載せてレスポンスを返す - これ以降クライアントはセッションIDをヘッダに載せてアクセスする
Cookieとの違いは、「サーバ側」がセッションIDを保存している点です。
したがって、クライアント側でIDを改竄することが難しく、安全な通信が可能になります。
WebサーバはセッションIDより得たユーザーのセッション情報をDBやファイルに保存し、管理しています。
最後に
以上となります。