2013-03-15 8 views
5

セッションを実装しているとします。すべての応答にCookieヘッダーを設定する必要がありますか?

ブラウザがセッションCookieを提示するかどうかをチェックします。はいの場合、Cookieを認証し、セッションが関連付けられているユーザーを見つけて、要求の処理を続けます。

セッションクッキーが見つからなかった場合は、新しいセッションを作成し、後続のリクエストで受信すると予想されるクッキーをブラウザに送信します。

私の質問は、リクエストでセッションクッキーが見つかった場合、と同じクッキーを返信しますか?どのような状況下ではこの権利はありますか?

注:ピラミッドの実装ではすべての応答で無条件にセッションCookieが送信されるため、これをPyramid(Python)プログラマとして頼んでいます。 (go to code

答えて

8

通常、すべての応答ごとにCookieを設定する必要はありません。ブラウザは既にクッキーを持っており、それが有効である限り、クッキーをサーバーに送信し続けます。

特に、ピラミッドセッションクッキーは、通常のクッキーの有効期限機構とは別に期限が切れる署名付きのタイムスタンプ付きの秘密を含んでいるため、すべての要求に設定されます。 Pyramidがセッションがまだ新鮮であることを示すために埋め込みタイムスタンプを更新するたびに、新しいのCookieを設定することにより、言い換えると、Cookieセットは毎回異なるものです。

+0

はい、そうです!Pyramidのデフォルトのセッションインプリメンテーションでは、Cookieのアクセス時間が格納されます。すべてのリクエストで更新する必要があるため、すべてのレスポンスでCookieがリセットされます。そして、[pyramid_beaker](https://github.com/Pylons/pyramid_beaker/blob/master/pyramid_beaker/__init__.py)や[pyramid_redis_sessions](https://github.com/ericrasmussen/pyramid_redis_sessions/blob/)のような別の実装では、 master/pyramid_redis_sessions/__ init__.py)は、無条件で実行しません。あなたが正しい。 – treecoder

6

セッションクッキー(ブラウザセッションクッキーのように、クライアントが閉じられるとすぐに破棄される)私はおそらくこれをしません。それは特に何も達成していませんし、このような繰り返しを続けるのは帯域幅の無駄です(少量ですが)。

>ここにクッキーがあります。
<ありがとうございます!
>本当に、クッキーはありません。
<同じクッキーではありませんか?
>真剣に、このクッキーを持ってください。
<停止してください。

何か変更したときにクッキーを再度送信することは意味があります。したがって、絶対有効期限を持つクッキーの場合は、その有効期限を頻繁に更新することをお勧めします。 Cookieに格納されている値を変更している場合は、ヘッダーも再送信されます。

私は一般的にPHP開発者であり、PHPのネイティブセッションがこれを行います(無条件で毎回送信します)。私はこれが理由であると考えている。a)実装が簡単である。b)クライアント側の永続ストレージにクッキーを書き込むことができない可能性があり、おそらく有効期限を無視するか、または動作していないユーザエージェントを考慮しようとする。<ここでの行動は>です。

誰もが2109/2965を適切に実装している場合、意味的に同一のCookieを複数回設定する必要はありません。人々が実際に標準を読んでも、開発者の人生は鈍いのではないでしょうか?

関連する問題