【发布时间】:2014-08-23 10:25:57
【问题描述】:
我在 MVC 上并使用 KnockoputJS。我从 2 中选择值。在第一个选择中我选择 IDCompany,第二个选择我选择 IDSubsidiary。
我将 Json 中的模型发送到控制器中的 JsonResult,然后创建一个变量 session 和一个 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"] 和 Session["IDSubsidiary"](变为 null)。
问题可能是,例如 Session["IDSubsidiary"] 和 Response.Cookies["IDSubsidiary"] 名称相同?
【问题讨论】:
-
会话确实会在一段时间后过期。如果您想永久保存这些数据,也许数据库是一个更好的存储位置?
-
会话超时,并在一定时间后被简单地终止......而 30 分钟可能是这个值,您必须检查服务器配置。
-
会话可能随时因您无法控制的原因而丢失。您需要能够检测到这种情况并重建/恢复。我建议将所有会话对象访问抽象化到可以检测空值并自行重置的外观层后面,这样调用代码就不会注意到它。
标签: asp.net-mvc asp.net-mvc-4 knockout.js session-variables