会话ID未被存储在cookie中

问题描述:

在我的ASP.NET MVC 3应用程序中,当我在LogOn Action中检查我的记住我框时,它应该创建一个持久性cookie,以便当我关闭浏览器并重新打开会话ID未被存储在cookie中

FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe); 

当我使用小提琴手,我可以看到会话ID被送到像这样:它,我应该还是会保持登录

Request sent 342 bytes of Cookie data: 

ASP.NET_SessionId=<Session ID>; .ASPXAUTH=<Auth String> 

但是,当我关闭浏览器,重新打开它,我仍然登录,但请求不发送会话ID:

Request sent 298 bytes of Cookie data: 

.ASPXAUTH=<Auth String> 

然后我把Response.Write(Session.SessionID)放在我的Action中,每当我重新打开我的浏览器时刷新页面,这个就会改变。如果我不关闭浏览器,则每次刷新时会话ID保持不变。

我使用StateServer来保持会话状态,因为我认为这可能会解决问题,因为我也通过InProc来体验它。

这是预期的行为。设置授权cookie的概念和会话的概念并不是一回事。只要用户打开浏览器,ASP.NET中的会话就会生存,因为会话存储在每个会话cookie中。

” ...... SessionID的值存储在浏览器中的永久的session cookie的 (http://msdn.microsoft.com/en-us/library/ms178581.aspx)

持续存在会话是一个糟糕的主意,请记住,Sessions的正常情况是它们存储在内存中,您是否真的想将用户会话保存在未登录的内存中在一个星期内?您试图保存那么长时间的任何类型的“会话”数据都不应该存储在会话中,而是存储在持久数据存储区中(读取:数据库)

根据您的意见更新

我可能会建议你做这样的事情:

public string GetMyCompany(){ 
    return Session["MyCompany"] = Session["MyCompany"] ?? GetMyCompanyFromDatabase(); 
} 
+0

右行,因为我想在一个会话变量保存用户的公司,因为它是在用我的'_Layout.cshtml'文件和思想的Session变量会是最好的,因为它在我的应用程序中的所有视图中都是持久的,但似乎如果他们关闭浏览器,这个变量不再存在 – CallumVass 2012-04-20 13:52:49

+0

当然,非常有意义。但是,我建议你做这样的事情: public string GetMyCompany(){ return Session [“MyCompany”] = Session [“MyCompany”] ?? GetMyCompanyFromDataBase(); } – aquinas 2012-04-20 13:56:56

+0

啊,完美我会试试看,谢谢! – CallumVass 2012-04-20 13:58:28