私は、各ユーザーのTenantIDをクッキーに保存するサイトを持っています。今日私はあるコンピュータに1つのユーザーのサイトを持ち、別のコンピュータにもう1人のユーザーのサイトを持ち、両方を更新すると、一方のユーザーがもう一方のページのコンテンツを取得するのに気付きました。サイトの構成方法を説明しようとします。1人のユーザーで2人のユーザーが相手のデータを取得する
コントローラには、データベースにアクセスしてそのユーザーのテナントイドであるCookie値に基づいてユーザーのページを取得する簡単な機能があります。
[OutputCache(Duration = 1)] //dont cache
public ActionResult GetContent()
{
string tenantid = GetSiteCookie();
if (tenantid == "")
return RedirectToAction("PickSite", "Login");
DbContext db = new DbContext
var model = db.Website.FirstOrDefault(x => x.tenantID == tenantid);
return PartialView("ContentView", model);
}
ユーザーが、私は私のAJAX機能を呼び出して、私のレイアウト・ページのid = pagecontentでのdivにhtmlに設定するいくつかのJavaScriptを持つページがヒットします。
$.ajax({
url: '/WebSite/GetContent',
type: 'POST',
contentType: 'application/json',
success: function (resp) {
$('#pagecontent').html(resp);
}
});
わかりました。それぞれのユーザーは、独自のコンピュータと、ブラウザにCookieとして保存されているテナントIDを持っています。コントローラがクッキーを取得し、そのユーザのコンテンツを返すという、AJAX関数がページをロードします。これは一度に1人のユーザにとってうまく機能します。しかし、同じ時間user1がuser2のデータを取得するか、その逆の場合でも両方のコンピュータでリフレッシュを実行すると、
これを修正しようとして、このGetContent(string randomStringIDontUse = "")のような変数を受け入れるようにコントローラの機能を変更し、次に私のajax呼び出しから各ユーザーごとに異なるランダムな文字列を渡します。私がこれをして同時にリフレッシュすると、何度も何度も自分のコンテンツを取得します。だから、これは動作しますが、私はなぜこれを行う必要があるのか分かりません。
各ユーザーのセッション変数としてtenantIDを保存しようとしましたが、GetContentを呼び出すのではなく、GetContentのCookieから値を取得するのではなく、セッション変数からtenantIDを取得しますが、他のコンテンツを見る。
ここで何が起こっているのかと、別のコンピュータの別々のブラウザからのクッキーに基づいてクエリを実行すると、あるユーザーが他のユーザーのコンテンツを取得する理由は何ですか?
私はあまりにもキャッシングが疑わしいですが、Duration = 0に設定する問題は、@ {Html.RenderAction( "GetContent"、 "Website")を使用してビューをレンダリングしようとするとエラーになりました。 }エラーは "Durationは正の数でなければなりません"と表示します。 – bhs8227