.net フレームワーク 4.0 を使用して asp.net サイトに取り組んでいます。そのための出力キャッシュを組み込んでみました。
しかし、残念ながらそれは機能していません。後で、マイクロソフトのセキュリティ アップデートを削除するKB2656351
と問題が解決することがわかりました。
更新プログラムを削除せずにこれを行う方法が他にあるかどうかを知りたいです。
2 に答える
この問題は、上記の更新をインストールし、応答にCookieがある場合にのみ発生します。リクエストにCookieが含まれているかどうかは関係ありません。この問題を修正するための回避策を見つけました。カスタムHTTPModuleを作成し、利用可能なすべてのCookie(新しく追加されたCookieを含む)をにコピーしましたContext.Items
。次に、応答で使用可能なすべてのCookieをクリアします。
次のステップでは、Context.itemsに格納されているオブジェクトを読み取り、応答に追加し直します。したがって、出力キャッシュプロバイダーがページをキャッシュしようとすると、応答にCookieがありません。いつものように動作します。その後、Cookieを追加し直します。
public void Init(HttpApplication context)
{
context.PostReleaseRequestState += new EventHandler(OnPostReleaseRequestState);
context.PostUpdateRequestCache += new EventHandler(OnPostUpdateRequestCache);
}
public void OnPostReleaseRequestState(Object source, EventArgs e)
{
HttpApplication application = (HttpApplication)source;
HttpContext context = application.Context;
HttpCookieCollection cookieCollection = new HttpCookieCollection();
foreach (string item in context.Response.Cookies)
{
HttpCookie tempCookie = context.Response.Cookies[item];
HttpCookie cookie = new HttpCookie(tempCookie.Name) { Value = tempCookie.Value, Expires = tempCookie.Expires, Domain = tempCookie.Domain, Path = tempCookie.Path };
cookieCollection.Add(cookie);
}
context.Items["cookieCollection"] = cookieCollection;
context.Response.Cookies.Clear();
}
public void OnPostUpdateRequestCache(Object source, EventArgs e)
{
HttpApplication application = (HttpApplication)source;
HttpContext context = application.Context;
HttpCookieCollection cookieCollection = (HttpCookieCollection)context.Items["cookieCollection"];
if (cookieCollection != null)
{
foreach (string item in cookieCollection)
{
context.Response.Cookies.Add(cookieCollection[item]);
}
}
}
この更新プログラムに関してここで報告されたいくつかの問題があり、.net Framework 4 の修復が機能しました。.net Framework の破損、またはフレームワークと IIS のインストール順序が原因で、ASP.Net の登録が解除される可能性があるため、ASP.Net を具体的に登録する必要があり、これらの問題が発生することがあります。
.Net フレームワークを修復し、ASP.Net を個別に登録して、それが機能するかどうかを確認することをお勧めします。