16

セッションがいつ作成され、どのエンティティが作成されるのか(IPごと、ブラウザごと、ログインユーザーごと)がよくわかりません。デフォルトでは訪問者ごとにセッションが作成されることをドキュメントで確認しましたが、訪問者 (ブラウザまたは IP) とは何ですか?

4

2 に答える 2

16

HTTP セッションとは何ですか?

Web ページを表示するために、ブラウザーはHTTP要求をサーバーに送信し、サーバーは HTTP 応答を返します。Web サイトのリンクをクリックするたびに、新しい HTTP トランザクションが発生します。つまり、時間の経過とともに持続する接続ではありません (電話のように)。Web サイトとの通信は、多くのモノリシックな HTTP トランザクション (数十または数百の電話、各電話は数語) で構成されています。

では、サーバーはどのようにしてユーザーに関する情報を記憶できるのでしょうか? たとえば、ユーザーがログインしている (IP アドレスは信頼できません)。初めて Web サイトにアクセスすると、サーバーはランダムな文字列を作成し、HTTP 応答で、その値でいわゆる HTTP Cookie を作成するようブラウザに要求します。Cookie は、(Cookie の) 名前と値にすぎません。単純なセッション対応の Django サイトにアクセスすると、サーバーはブラウザに「sessionid」という名前の Cookie をランダムに生成された値で設定するように要求します。

Django サイトに最初のリクエストを行っているときの FireBug net タブのスクリーンショット。 HTTP Cookie がどのように設定されるかを示します。

その後、ブラウザがそのドメインに対して HTTP リクエストを行うとき、HTTP リクエストに Cookie が含まれます。

最初のトランザクションで設定された Cookie が後続のリクエストにどのように含まれるかを示します。

サーバーはこれらのセッション ID を保存し (django の場合、デフォルトではデータベースに保存されます)、いわゆるセッション変数と一緒に保存します。そのため、HTTP 要求とともに送信されたセッション ID に基づいて、以前に設定されたセッション変数を掘り出したり、セッション変数を変更または追加したりできます。Cookie を削除すると (Firefox では ctrl+shift+delete)、Web サイト (Gmail、Facebook、Django サイトなど) があなたを記憶していないことがわかり、再度ログインする必要があります。ほとんどのブラウザーでは、Cookie を一般的に、または特定のサイトに対して (プライバシー上の理由から) 無効にすることができますが、これは、それらの Web サイトにログインできないことを意味します。

ブラウザごと、ウィンドウごと、タブごと、IPごと?

異なるウィンドウからであっても、同じブラウザ内で異なる GMail アカウントにログインすることはできません。ただし、Firefox で 1 つのアカウントにログインし、Chrome で別のアカウントにログインすることは可能です。答えは、ブラウザごとです。ただし、必ずしもそう単純ではありません。Firefox では異なるプロファイルを使用でき、それぞれが異なる Cookie を保持できるため、異なるアカウントに同時にログインできます。MultiFoxなど、複数のセッションを維持するための Firefox プラグインもあります。

セッションはすべて、ブラウザが HTTP リクエストで送信するセッション Cookie に依存します。

遊んで

何が起こっているのかを完全に理解するには、Firefox 用のFireBugおよびFireCookieプラグインをインストールすることをお勧めします。上記のスクリーンショットは、FireBug のネット パネルから取得したものです。FireCookie は、サイトにアクセスしたときに、いつ、どの Cookie が設定されるかの概要を示し、どの Cookie を許可するかを規制できるようにします。

サーバー側のエラーがあり、DEBUG=True を指定している場合、Django エラー メッセージには、送信された Cookie を含む HTTP リクエストに関する情報が表示されます。

ここに画像の説明を入力

于 2012-06-17T07:09:21.460 に答える