【问题标题】:Why I lose my session variable?为什么我丢失了会话变量?
【发布时间】: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


【解决方案1】:

发生这种情况的原因有两个。 1) 会话超时,或 2) 您正在使用“进行中”会话状态。

如果用户在一个页面上停留了三十分钟,然后下次刷新或转到另一个页面时该值消失了,则可能是超时问题。您可以尝试增加 sessionState 超时;但是,您可能会开始遇到下面描述的问题。如果您决定使用 Session 变量,您可能应该切换到与默认的“进行中”不同的状态模式。

如果没有超时,您的价值丢失的原因是因为“处理中”会话状态会在应用程序池回收时消失。这可能由于多种原因而发生。您可能希望将会话状态模式更改为 State Server 或 SQL Server。这将使您的会话数据在应用程序池回收之间保留,但如果您使用状态服务器路由,则需要在 Web 服务器上启用“ASP.NET 会话状态服务”。

有几种状态模式,每种都有不同的行为。你可以阅读他们here on MSDN.

【讨论】:

  • 如果您使用此路由,则 msdn 页面上的此注释非常重要:Objects stored in session state must be serializable if the mode is set to StateServer
  • 这似乎更有可能是会话超时,因为他说它发生在 30 分钟后。
  • @JohnSaunders 这是一个公平的观点;我假设即使有用户活动它也会消失(这应该重置超时倒计时)。我也会更新以包含它。
  • 默认超时,如果未在 web.config 中设置,则为 20 分钟。 msdn.microsoft.com/en-us/library/… 寻找发生这种情况的迹象。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-09-20
  • 1970-01-01
  • 2012-01-10
  • 2011-04-15
  • 1970-01-01
  • 2011-12-05
相关资源
最近更新 更多