3

Set-Cookie ヘッダーが解析される Firefox のソース コードを教えてください。正確な動作を理解したい。

理由を知りたい場合は、さらにお読みください。アプリケーションのさまざまな制約のために、単一の Set-Cookie ヘッダー内で複数の Cookie を渡す必要があります。RFC-2109 では、

「Set-Cookie 応答ヘッダーは、トークン Set-Cookie: で構成され、その後に 1 つ以上の Cookie のコンマ区切りリストが続きます。各 Cookie は NAME=VALUE ペアで始まり、その後に 0 個以上のセミコロンで区切られた属性値が続きます。ペア。」

したがって、次の Set-Cookie ヘッダーを渡すことができるはずです

セット Cookie: name1=value1; attr11=attrval11; attr12=attrval12,name2=value2; attr21=attrval21; attr22=attrval22;

うまくいきません。ただし、以下は機能します

セット Cookie: name1=value1, name2=value2; attr1=attrval1; attr2=attrval2;

そして、さまざまな Cookie にさまざまな属性を与えたいと考えています。

[アップデート]

実際の例:

例#1-

セット Cookie: cookie1=value1; パス=/、cookie2=値2; パス=/

この場合、Firefox は最初の Cookie (名前は「cookie1」、値は「value1」) を解析して取得します (2 番目の Cookie は完全に無視されます)。

例#2-

セット Cookie: cookie1=value1,cookie2=value2; パス=/

この場合、Firefox は、名前が「cookie1」で値が「value1,cookie2=value2」の Cookie が 1 つあると認識します。これも意図したものではありません。

4

3 に答える 3

1

MXRをざっと見てみると、メインロジックがにあることがわかりますnsCookieService::SetCookieInternal。必要に応じて、リンクを前後にたどることができます。実際の問題に関しては、実際の例のヘッダーを指定すると役立つ場合があります。

于 2010-07-08T05:04:54.197 に答える
0

私の理解では、ブラウザはSet-Cookieヘッダーごとに複数のCookieに関して標準を多少異なる方法で実装します。ただし、複数のSet-Cookieヘッダーを送信して、複数のCookieの値を設定できます。

Set-Cookie: name1=value1; attr11=attrval11; attr12=attrval12
Set-Cookie: name2=value2; attr21=attrval21; attr22=attrval22

フレームワーク(PHP、ASP.NET、RoRなど)が提供するものを使用する代わりに、手動で応答のヘッダーを作成する理由はありますか?

于 2010-07-08T04:58:51.650 に答える
0

ソース コードを読むと、Firefox がこの点に関して RFC-2109 を実装しておらず、Cookie セパレータとして「,」の代わりに CR または LF を使用していることは明らかです ( http://mxr. mozilla.org/mozilla-central/source/netwerk/cookie/nsCookieService.cpp )。Firefox v3.6.6 で両方を試しましたが、CR は機能していますが、LF は機能していません。

結論: Firefox では、',' の代わりに CR を使用して Cookie を区切ることができます。

グリッチ : (CR、LF、'、') のうちどれも Internet-Explorer で作業していません。今、誰かが IE の「ソース」コードを教えてくれますか?

于 2010-07-08T06:29:56.563 に答える