我有一个网站,我将每个用户的TenantID存储在一个cookie中。今天我注意到,如果我在一台计算机上有一个用户的网站,另一台计算机上有另一个用户的网站,并且同时刷新它们,则一个用户将获得另一个用户的网页内容。我将尝试解释网站的配置方式。一位用户获取其他数据的两个用户
在控制器中,我有一个简单的函数来访问数据库并根据用户的tenantid的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);
}
});
好,所以每个用户都有自己的计算机和自己的tenantID作为cookie存储在浏览器中。页面加载ajax函数称为控制器获取cookie并返回该用户的内容。这一次可以正常工作。但是,如果我在两台计算机上进行刷新,同时user1将获取user2的数据,反之亦然。
为了解决这个问题,我改变了我的控制器函数来接受像这样的GetContent变量(string randomStringIDontUse =“”),然后传入一个随机字符串,这个字符串对于我的ajax调用中的每个用户都是不同的。当我这样做,并在同一时间刷新,无论我尝试多少次,他们都会获得自己的内容。所以这有效,但我不明白为什么我需要这样做。
我甚至试图将tenantID保存为每个用户的会话变量,然后调用GetContent,而不是从GetContent中的Cookie中获取值我从会话变量中获取tenantID,但我仍然可以以一个用户看到别人的内容。
任何想法这里发生了什么,以及当查询完全基于来自单独计算机上不同浏览器的cookie时,一个用户会获得另一个用户的内容?
我也怀疑缓存,但设置Duration = 0的问题是,如果我试图使用@ {Html.RenderAction(“GetContent”,“Website”)渲染视图,则出现错误; }该错误会陈述“持续时间必须是正数”。 – bhs8227