我使用 MVC 并使用 KnockoputJS。我从 2 个选择中选择值。在第一个选择中,我选择 IDCompany,在第二个选择中,我选择 IDSubsidiary。
我将 Json 中的模型发送到控制器中的 JsonResult,然后创建一个变量会话和一个 cookie,并将 IDCompany 保存在 Session 变量和具有相同名称的 cookie 中。
我对 IDSubsidiary 也做了同样的事情。最后,我返回到 ajax 函数(首先调用“Save”)
[HttpPost]
public JsonResult Save(ViewModel viewModel)
{
Session["IDCompany"] = viewModel.IDCompany.ToString();
Response.Cookies["IDCompany"].Value = viewModel.IDCompany.ToString();
Response.Cookies["IDCompany"].Expires = DateTime.Now.AddDays(1);
Session["IDSubsidiary"] = viewModel.IDSubsidiary.ToString();
Response.Cookies["IDSubsidiary"].Value = viewModel.IDSubsidiary.ToString();
Response.Cookies["IDSubsidiary"].Expires = DateTime.Now.AddDays(1);
return Json(true);
}
问题是,过了一会儿(大约 30 分钟),我输了Session["IDCompany"]
and Session["IDSubsidiary"]
(变为空)。
例如,问题可能是 Session["IDSubsidiary"] 和Response.Cookies["IDSubsidiary"]
有同名吗?
发生这种情况的原因有两个。 1) 会话超时,或者 2) 您正在使用“处理中”会话状态。
如果用户在一个页面上停留了三十分钟,然后下次刷新或转到另一个页面时该值就消失了,则可能是超时问题。您可以尝试增加 sessionState 超时;但是,您可能会开始遇到下面描述的问题。如果您决定使用会话变量,您可能应该切换到与默认的“处理中”不同的状态模式。
如果没有超时,则您的值丢失的原因是“处理中”会话状态在应用程序池回收时消失。发生这种情况的原因有多种。您可能想要将会话状态模式更改为 State Server 或 SQL Server。这将使您的会话数据在应用程序池回收之间保留,但如果您选择状态服务器路线,则需要在 Web 服务器上启用“ASP.NET 会话状态服务”。
有多种状态模式,每种都有不同的行为。您可以阅读有关他们的信息在 MSDN 上。 http://msdn.microsoft.com/en-us/library/ms178586.aspx
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)