Jquery 一个用户中的两个用户获得另一个';s数据

Jquery 一个用户中的两个用户获得另一个';s数据,jquery,ajax,asp.net-mvc,entity-framework,Jquery,Ajax,Asp.net Mvc,Entity Framework,我有一个网站,我将每个用户的租户存储在cookie中。今天我注意到,如果我在一台计算机上有一个用户的站点,在另一台计算机上有另一个用户的站点,并同时刷新它们,一个用户将获得另一个用户的页面内容。我将尝试解释该站点是如何配置的 在控制器中,我有一个简单的函数来访问数据库,并根据cookie值(即用户的租户)获取用户的页面 [OutputCache(Duration = 1)] //dont cache public ActionResult GetContent() { string t

我有一个网站,我将每个用户的租户存储在cookie中。今天我注意到,如果我在一台计算机上有一个用户的站点,在另一台计算机上有另一个用户的站点,并同时刷新它们,一个用户将获得另一个用户的页面内容。我将尝试解释该站点是如何配置的

在控制器中,我有一个简单的函数来访问数据库,并根据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);
}
当用户点击页面时,我有一些javascript调用我的ajax函数,然后在我的布局页面中将html设置为一个div,id=pagecontent

$.ajax({
    url: '/WebSite/GetContent',
    type: 'POST',
    contentType: 'application/json',
    success: function (resp) {
        $('#pagecontent').html(resp);
    }
});
好的,所以每个用户都有自己的计算机和自己的租户作为cookie存储在浏览器中。加载ajax函数的页面称为控制器获取cookie并返回该用户的内容。一次一个用户可以很好地工作。但是,如果我在两台计算机上同时单击“刷新”,user1将获取user2的数据,反之亦然

为了解决这个问题,我更改了控制器函数,以接受一个变量,比如GetContent(string randomStringIDontUse=“”),然后传入一个随机字符串,每个用户的随机字符串与我的ajax调用不同。当我这样做并同时点击刷新时,无论我尝试了多少次,他们都会得到自己的内容。这是可行的,但我不明白为什么我需要这么做

我甚至尝试将tenantID保存为每个用户的会话变量,然后调用GetContent,但不是从GetContent中的cookie中获取值,而是从会话变量中获取tenantID,但我仍然可以看到一个用户看到另一个用户的内容


你知道这是怎么回事吗?当查询完全基于来自不同计算机上不同浏览器的cookie时,为什么一个用户会得到另一个用户的内容

如果你不想缓存,你应该写
[OutputCache(Duration=0)]
只要你使用$.ajax,你也应该在那里设置cache false:

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

在对缓存做了一些研究之后,我发现了这篇文章

删除[OutputCache]属性,创建我自己的[NoCache]属性,并将其放在我的控制器上,似乎解决了这个问题


我不能100%确定现在是否需要它,但我也会将cache:false添加到我的ajax调用中

我也怀疑缓存,但设置Duration=0的问题是,如果我尝试使用@{Html.RenderAction(“GetContent”,“Website”);}呈现视图,我会遇到一个错误。该错误将声明“Duration必须是正数”。