1. ホーム
  2. language-agnostic

[解決済み] セッションとは何ですか?どのように機能するのですか?

2022-03-26 10:36:26

質問

Pythonを使ったWebアプリケーション開発の勉強を始めたばかりです。クッキー」と「セッション」という言葉を目にすることがあります。私は、クッキーがブラウザ上のキーと値のペアでいくつかの情報を格納することを理解しています。しかし、私はセッションに関して少し混乱しています。セッションでも、ユーザーのブラウザ上のクッキーにデータを保存します。

たとえば、次のようにログインします。 username='rasmus'password='default' . このような場合、データはサーバーに送信され、サーバーは私をチェックし、認証されればログインすることになっています。しかし、このプロセスでサーバーはセッションIDを生成し、私のブラウザのクッキーに保存されます。サーバーは、このセッションIDをファイルシステムまたはデータストアに保存します。

しかし、セッションIDだけで、どうやってその後のサイト内移動中に私のユーザー名を知ることができるのでしょうか?セッションIDをキーとして、次のような詳細なデータをサーバーに保存するのでしょうか? username , email などが値になるのでしょうか?

私はここでかなり混乱しています。助けが必要です。

どのように解決するのですか?

HTTPはステートレスなので、あるリクエストを他のリクエストに関連付けるには、HTTPリクエストの間にユーザーデータを保存する方法が必要です。

クッキーやURLパラメータ(例えば http://example.com/myPage?asd=lol&boo=no は、2つ以上のリクエストの間でデータを転送するのに適した方法です。 しかし、クライアント側でそのデータを読み取り/編集可能にしたくない場合には、これらは良い方法ではありません。

解決策は、データをサーバーサイドに保存し、それにquot;id"を与え、クライアントがそのidだけを知る(そしてhttpリクエストごとに渡す)ようにすることです。これで、セッションが実装されました。あるいは、クライアントを便利なリモートストレージとして使うこともできますが、その場合はデータを暗号化し、サーバー側で秘密を保持することになります。

もちろん、他の人のセッションを乗っ取らないようにしたい、セッションは永遠に続くのではなく、期限切れにしたい、など考慮すべき点は他にもあります。

あなたの具体的な例では、ユーザーID (ユーザー名またはユーザーデータベース内の他のユニークなID) は、識別に成功した後、サーバーサイドでセッションデータに格納されます。そうすると、クライアントからの HTTP リクエストのたびに、 (クライアントから与えられた) セッション ID が、認証されたユーザー ID を含む (サーバーに保存された) 正しいセッションデータを指すようになります - そうすれば、あなたのコードはどのユーザーと話しているのかを知ることができます。