Learn VisualLearn API

ログイン状態は、サーバー側に保存するか、トークンの中に含めるか

セッションでは、サーバーがログイン状態そのものを保存領域に保存します。サーバーは、セッションidをキーにして探せるようにし、クライアントはそのidだけを、たとえばクッキーに保管します。

トークン、たとえば署名付きのJWTは、ログイン状態そのものをトークンの中に含んでいます。署名を検証できるサーバーは、何も問い合わせなくても、そのトークンを信用できます。

リクエストが複数のサーバーに分散されるとき、セッションidは、すべてのサーバーが同じ保存領域にアクセスできなければ使えません。トークンは、署名を検証できさえすれば、他に何も共有する必要がありません。

失効の速さにも、違いが出ます。セッションは、サーバーが記録を消せば、すぐに使えなくなります。一方、長い有効期限で発行したトークンは、期限が来るまで有効なままなので、失効させるには、サーバー側に別の仕組みが要ります。

この課の目標

セッションとトークンの違いを、状態がどこにあるかという観点で説明できる。複数サーバーへのスケール時にその違いがどう現れるかを説明できる。

サーバーを1台から3台に増やし、リクエストがどのサーバーにも届くようになった。ただし、3台はセッションの保存領域を共有していない。変更なしで、どのサーバーでもログイン状態を確認できる方式はどちら?