Jquery 一个用户中的两个用户获得另一个';s数据
我有一个网站,我将每个用户的租户存储在cookie中。今天我注意到,如果我在一台计算机上有一个用户的站点,在另一台计算机上有另一个用户的站点,并同时刷新它们,一个用户将获得另一个用户的页面内容。我将尝试解释该站点是如何配置的 在控制器中,我有一个简单的函数来访问数据库,并根据cookie值(即用户的租户)获取用户的页面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
[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必须是正数”。