· 

より高度なWebアプリケーションを作る準備をしよう!

より高度なWebアプリケーションを作る準備をしよう!

目安時間:30分

 

これまでのレッスンを通して、Webアプリケーションの基本的な機能を作れるようになったと思います。次のレッスンでは、より高度な機能であるログイン機能の作り方を学んでいきます。
ログイン機能を作るには「セッション管理」という仕組みが必要になるので、この記事で学んでおきましょう。
とても楽しみです!ほほほ、そうじゃな。焦らず、「セッション管理」の前提知識からひとつずつ学んでいくぞ。はい!

1. HTTP

Webについて知ろう!で学んだように、クライアントとサーバーの通信は、クライアントのリクエスト( request )を元にサーバーがレスポンス( response )を返すという流れになっています。

 

リクエストやレスポンスなど、クライアントとサーバーが通信するときの手順やデータ形式にはルールがあります。このルールは、HTTP(Hyper Text Transfer Protocol:ハイパー・テキスト・トランスファー・プロトコル)と呼ばれています。

 

Webアプリで使うリクエストとレスポンスはHTTPに従って行われていたんですね!その通りじゃ。次はセッション管理に関係するHTTPの通信の性質を見ていこう。

2. ステートレス性

HTTPに則った通信には、ステートレス(Stateless)性という性質があります。ステートレス性とは、サーバーがクライアントの状態(state)を保持しない(less)という性質のことです。
ステートレス性にはサーバーの処理速度の向上などのメリットがありますが、高度なWebアプリケーションを作るうえでは困ることがあります。ログイン機能のあるWebアプリケーションを例に見ていきましょう。

 

まず1回目の通信でクライアントはログインをリクエストします。そして、サーバーはログインできたとレスポンスを返します。このときクライアントの状態は「ログインしている」となります。

2回目の通信でクライアントはログイン後に見れるプロフィールページをリクエストします。しかし、サーバーはログインしていないとレスポンスを返します。サーバーはクライアントの状態を保持しないので、このときクライアントの状態は「ログインしていない」となります。

 

通信の結果が毎回リセットされるイメージじゃな。あれ、ログインしてもリセットされるなら、どうやってログイン状態を保つんですか?この問題はセッション管理を使うことで解決できるのじゃ。詳しく見ていこう。

3. セッション管理

セッション管理とは、セッション中のクライアントの状態をサーバーが管理することです。セッションとは、通信の始まりから終わりまでを指します。たとえば、ログインしてからログアウトするまでが、セッションとなります。このセッションの間、「ログインしている」というクライアントの状態をサーバーが管理することがセッション管理に当たります。
どのようにクライアントの状態を管理するのかは具体的な流れを使って説明するぞ。

セッション管理の流れ

セッション管理の流れは、以下のように3段階に分けられます。
  1. クライアントの状態を登録する(例:ログインする)
  2. クライアントの状態を確認する(例:プロフィールページを見る)
  3. クライアントの状態を破棄する(例:ログアウトする)
各段階で行われることを具体的に見ていこう。

 

1. クライアントの状態を登録する

クライアントがサーバーにログインをリクエストします(①)。ログインに成功した場合、サーバーは「(クライアントが)ログインしている」という状態をメモリーやデータベースに登録します(②)。そのあと、サーバーはクライアントにセッションIDを返します(③)。クライアントは、受け取ったセッションIDを保存します(④)。
※クライアントの状態を登録したデータをセッション情報、それに紐づくIDのことをセッションID(Session ID, SID)と呼びます。図中では、「ログインしている」という文字列がセッション情報、「xyz」がセッションIDに当たります。

 

2. クライアントの状態を確認する

クライアントは、保存したセッションIDと一緒に、サーバーにプロフィールページをリクエストします。(⑤)。サーバーは送られてきたセッションIDに紐づくセッション情報を参照し、「(クライアントが)ログインしている」状態であることを確認します(⑥)。クライアントの状態を確認できたので、サーバーはクライアントにプロフィールページを返します(⑦)。
⑥でサーバーはクライアントの状態を復元し、以前の通信の続きとして処理しているぞ。

 

3. クライアントの状態を破棄する

クライアントがサーバーにログアウトをリクエストします。セッションIDも一緒ににサーバーに渡します(⑧)。サーバーは、セッションIDに紐づくセッション情報を削除します(⑨)。サーバーは、クライアントを適当なページにリダイレクトします(⑩)。
このようにしてサーバーは、クライアントの状態を登録してから破棄するまで保持します。これがセッション管理の流れになります。

 

セッション管理の流れについてイメージがついたかの?はい!

4. まとめ

この記事のポイントは3点です。

 

  1. クライアントとサーバーが通信するときの手順やデータ形式を定めたルールをHTTPと呼びます。
  2. HTTPに則った通信のステートレス性が問題になる場合があります。ステートレス性とは、サーバーがクライアントの状態を保持しないという性質のことです。
  3. ステートレス性の問題を解決する方法のひとつがセッション管理です。セッション管理では、サーバーがクライアントの状態をセッション情報として管理します。管理するときには、セッションIDを用います。