私は Python を使用して Web アプリケーション開発を学び始めたところです。「Cookie」と「セッション」という用語に出会いました。Cookie は、ブラウザーのキーと値のペアに情報を保存するという意味だと理解しています。しかし、セッションについては少し混乱しています。セッションでも、ユーザーのブラウザーの Cookie にデータが保存されます。
たとえば、私はusername='rasmus'
と を使用してログインしますpassword='default'
。このような場合、データはサーバーに送信され、サーバーは認証されれば私を確認してログインすることになっています。ただし、プロセス全体を通して、サーバーはセッション ID も生成し、それが私のブラウザの Cookie に保存されます。サーバーは、このセッション ID をファイル システムまたはデータストアにも保存します。
username
しかし、セッション ID だけに基づいて、その後のサイトのトラバース中にユーザー名をどうやって知ることができるのでしょうか? データは、キーがセッション ID で、email
などの詳細が値となる辞書としてサーバー上に保存されるのでしょうか?
かなり混乱しています。助けが必要です。
ベストアンサー1
HTTP はステートレスであるため、リクエストを他のリクエストに関連付けるには、HTTP リクエスト間でユーザー データを保存する方法が必要です。
クッキーまたはURLパラメータ(例:http://example.com/myPage?asd=lol&boo=no) はどちらも、2 つ以上のリクエスト間でデータを転送するのに適した方法です。ただし、クライアント側でデータを読み取り/編集可能にしたくない場合は適していません。
解決策は、そのデータをサーバー側に保存し、それに「ID」を与え、クライアントにその ID のみを知らせる (そして、すべての HTTP 要求でその ID を返す) ことです。これでセッションが実装されました。または、クライアントを便利なリモート ストレージとして使用することもできますが、その場合はデータを暗号化し、サーバー側で秘密を保持します。
もちろん、他のユーザーのセッションを乗っ取られないようにしたい、セッションが永久に続くのではなく期限切れになるようにしたいなど、考慮すべき他の側面もあります。
特定の例では、ユーザー ID (ユーザー名またはユーザー データベース内の別の一意の ID) は、識別が成功した後、サーバー側のセッション データに保存されます。その後、クライアントから取得するすべての HTTP 要求に対して、セッション ID (クライアントによって指定) は、認証されたユーザー ID を含む正しいセッション データ (サーバーによって保存) を示します。これにより、コードはどのユーザーと通信しているかを認識できます。