Why I lose my session variable?

余生长醉 提交于 2019-12-24 11:53:57

问题


I´m on MVC and using KnockoputJS. I select the value from 2 select. In the first select i choose IDCompany, and the second select i choose IDSubsidiary.

I send the model in Json to JsonResult in the controller and I create a variable session and a cookie and save IDCompany in the Session variable and in the cookie with the same name.

I do the same with IDSubsidiary. Finally, I return to the ajax function (which call "Save" at first)

[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);
}

The problem is that after a while (30 mins approximately), i lose Session["IDCompany"] and Session["IDSubsidiary"] (becomes null). The problem can be that, for example, Session["IDSubsidiary"] and Response.Cookies["IDSubsidiary"] has the same name?


回答1:


There are two reasons this could be happening. 1) The session is timing out, or 2) you are using "In Process" session state.

If the user sits on a page for thirty minutes, and then the value is gone the next time they refresh or go to another page, its likely a timeout problem. You could try increasing the sessionState timeout; however, you'll probably start running into the issue described below. If you are determined to use Session variables, you should probably switch to a different state mode than "in process" which is the default.

If it is not timing out, the reason your value is lost is because "In Process" session state, goes away when the App Pool recycles. This can happen for a variety of reasons. You probably want to change your session state mode to State Server or SQL Server. This will keep your session data around between app pool recycles, but you will need to enable the "ASP.NET Session State Service" on the web server if you go the State Server route.

There are several state modes, each with different behaviors. You can read about them here on MSDN.



来源:https://stackoverflow.com/questions/24534343/why-i-lose-my-session-variable

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!