2017-03-09 11 views
0

私は、各ユーザーの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を取得しますが、他のコンテンツを見る。

ここで何が起こっているのかと、別のコンピュータの別々のブラウザからのクッキーに基づいてクエリを実行すると、あるユーザーが他のユーザーのコンテンツを取得する理由は何ですか?

答えて

0

あなたがいる限り、あなたはあまりにもそこに偽のキャッシュを設定する必要がありアヤックス$を使用してもあなたを[OutputCache(Duration = 0)]を書くべきキャッシュしたくない場合は、次の

$.ajax({ 
     cache: false, //note this 
     url: '/WebSite/GetContent', 
     type: 'POST', 
     contentType: 'application/json', 
     success: function (resp) { 
      $('#pagecontent').html(resp); 
     } 
    }) 
+0

私はあまりにもキャッシングが疑わしいですが、Duration = 0に設定する問題は、@ {Html.RenderAction( "GetContent"、 "Website")を使用してビューをレンダリングしようとするとエラーになりました。 }エラーは "Durationは正の数でなければなりません"と表示します。 – bhs8227

0

キャッシングの研究のビットを行った後、私はこの記事

Prevent Caching in ASP.NET MVC for specific actions using an attribute

[OutputCache]属性を削除し、[NoCache命令]の私自身の属性を作成し、私のコントローラでこれを置くことに見つかった問題を解決しているようです。

今必要な場合は100%ではありませんが、私はキャッシュを追加します:私のajax呼び出しにはfalseです。

関連する問題