ASP.NETを使用したCookie内の大きな文字列の分割と再結合
-
25-09-2019 - |
質問
大きな文字列を Cookie に保存したいのですが、Cookie あたりの最大文字列長と最大 Cookie 数のベスト プラクティスがわかりません。
文字列を分割し、後で一連の Cookie を結合するにはどのようなロジックを使用すればよいでしょうか?
(Microsoft ADFS とおそらく Siteminder がこの手法を使用しているため、その実装がどのようなものであるかに興味があります)
解決
Cookieはブラウザが扱うものなので、ブラウザごとに制限が異なります。
各サイトの Cookie データの総量にも制限があるため、Cookie の分割は一時的な効果しかありませんが、各ページのデータ転送にオーバーヘッドも追加されます。
各ブラウザの Cookie ごとの制限:
Internet Explorer は約 3904 バイトの最大 Cookie を処理します
Mozilla Firefox は約 3136 バイトの最大 Cookie を処理します
Chrome でいくつかのテストを行うと、大きな Cookie によって Chrome が内部でクラッシュし、ページの外にメッセージが表示されません。
現在、Netscape と Microsoft は、RFC 2109 の制限に基づいて Cookie の数を制限する措置を講じています。 Cookie の総数が 300 に達する 参照: http://www.cookiecentral.com/faq/#2.5
これにはさまざまな理由がありますが、そのうちの 1 つはハッキングです。サイトをイメージして、Cookie に完全なビデオをアップロードして、ハードディスクをいっぱいにしてしまいます...
ベスト プラクティスは、ブラウザ上に小さな Cookie 参照を保持し、それをサーバー上の実際のデータに接続することだと私は言います。小さければ小さいほどあらゆる面で優れています。
Cookie のテストを作成する方法は、そのようなコードを作成できます。
if(Request.Cookies["cookieTest"] == null)
Request.Cookies["cookieTest"].Value = "more text into cookie";
else
Request.Cookies["cookieTest"].Value += "more text into cookie";
// check now the size
Responce.Write(Request.Cookies["cookieTest"].Value.Length);
私の経験では、制御されていない大規模なデータを Cookie で使用しようとすると、ランダムで予期せぬ問題が数多く発生することがわかりました。サポートが次のように言うのを何度も聞きました。Cookie をクリアして、もう一度お試しください:)