セッションとは?
はじめに
先日、アプリケーションとはそもそも何かについて聞かれたので、アプリケーション状態(セッション状態)について書いていこうと思います。
セッションとは簡単に表現すると、一連の流れがあり始まり〜終わりまでのことです。
セッションとは簡単に表現すると、一連の流れがあり始まり〜終わりまでのことです。
例
病院では、どのような診察が行われるでしょうか?
患者は診察券やカルテを通じて、過去の診察内容や治療履歴が記録され、それに基づいて次の診察や治療が行われます。
このことは、Webの世界ではサーバーがユーザーのセッション情報を保持し、ユーザーが同じ状態(ログイン済み状態)で操作を続けられるという点で一致します。このことはステートフルということができます。
一方で、初診の場合は、患者の過去の病歴を共有されていないため、ゼロから問診が始まります。Webで言う、会員登録やセッション生成になります。このことは、ステートレスと言うことができます。
また、状態を管理するためにはどのようなツールが用いられているでしょうか?
病院では、カルテやマイナンバーが状態管理ツールに当たります。
※マイナンバーカードには患者の状態が記録されることはありません。
WEBではCookieやセッションID、トークン認証などで状態管理を行います。
※話はそれますが、病院では「人」が介在するため非言語的な情報(表情・態度など)で細かい文脈を理解できますが、アプリケーションは言語化された情報しか扱えないと言う差はあります。
利点・欠点
ここでは、ステートフルおよびステートレスの利点・欠点を記載します
ステートフル
利点
- 送信データ量が最低限
更新情報のみ受け渡すことで通信が成り立ちます - 通信エラーに強い
通信時に雑音で伝わらなかった場合に、リクエストを繰り返すことができ、サーバーはどのような状態なのか保持しているため、クライアントに状態を通知することができます
欠点
- サーバーは使用者(クライアント)の状態を記憶し続けるため、短時間に大量のアクセスがある場合にパフォーマンスが落ちてしまいます。
100台まで同時にアクセスできるのであれば、101台アクセスがある場合、サーバーを2台用意しなければなりません
ステートレス
利点
- 大規模化しやすい
サーバーは使用者(クライアント)の情報を記憶し続ける必要はないため、大量のアクセスに対応しやすいことが特徴です
送信データにセッション情報を含むことで実現します
欠点
- 送信データ量が増大
送信データに、更新情報を含む全てのユーザー判別情報を含むため、データが増大しがちです。
送信データには、更新しない情報も併せて送信する必要があります。 - 通信エラーに弱い
サーバーでは送信者の情報を記憶しないため、通信が失敗し再送信した場合、失敗した通信でどのような処理までが行われたかを考えて設計する必要があります
まとめ
セッションとは、ログインしてからログアウトするまでの一連の操作のことでした。
ステートフルな通信方式(システム)にするか、ステートレスな通信方式(システム)にするかはどちらでも良いのですが、打ち合わせ等で、共通言語として頭の中にあると会話しやすいと思います。
