C# 会话ID未存储在cookie中

C# 会话ID未存储在cookie中,c#,asp.net-mvc-3,forms-authentication,C#,Asp.net Mvc 3,Forms Authentication,在我的ASP.NET MVC 3应用程序中,当我在登录操作中选中“记住我”框时,它应创建一个持久cookie,以便在我关闭浏览器并重新打开浏览器时,我仍应登录: FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe); 当我使用Fiddler时,我可以看到会话ID是这样发送的: Request sent 342 bytes of Cookie data: ASP.NET_SessionId=<Session

在我的ASP.NET MVC 3应用程序中,当我在登录操作中选中“记住我”框时,它应创建一个持久cookie,以便在我关闭浏览器并重新打开浏览器时,我仍应登录:

FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
当我使用Fiddler时,我可以看到会话ID是这样发送的:

Request sent 342 bytes of Cookie data:

ASP.NET_SessionId=<Session ID>; .ASPXAUTH=<Auth String>
请求发送了342字节的Cookie数据:
ASP.NET_SessionId=。阿斯珀斯=
但当我关闭浏览器并重新打开时,我仍在登录,但请求未发送会话ID:

Request sent 298 bytes of Cookie data:

.ASPXAUTH=<Auth String>
请求发送了298字节的Cookie数据:
ASPXAUTH先生=
然后,我将
Response.Write(Session.SessionID)
放在我的操作中,每当我重新打开浏览器刷新页面时,这个操作就会改变。如果我不关闭浏览器,则每次刷新时会话ID保持不变


我正在使用
StateServer
来保存会话状态,因为我认为这可能会解决问题,因为我在
InProc

中也体验到了这是预期的行为。设置授权cookie的概念和会话的概念不是一回事。ASP.NET中的会话意味着只要用户打开浏览器,会话就一直存在,因为会话存储在每会话cookie中

“…SessionID值存储在非过期会话中 浏览器中的cookie(http://msdn.microsoft.com/en-us/library/ms178581.aspx)

拥有一个持久会话是一个坏主意。记住,会话的正常情况是它们存储在内存中。您真的想将一周内未登录的用户的会话保存在内存中吗?您尝试保存那么长时间的任何类型的“会话”数据都不应该存储在会话中,而应该存储在持久数据存储中(读:数据库)

根据您的评论进行更新

我可以建议你这样做吗:

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

好吧,因为我想在会话变量中保留用户的公司,因为它在我的
\u Layout.cshtml
文件中使用,并且认为会话变量最好是在我的应用程序中的所有视图中持久化的,但是如果他们关闭浏览器,这个变量似乎不再存在,这很有意义。但是,我可能建议您这样做:公共字符串GetMyCompany(){return Session[“MyCompany”]=Session[“MyCompany”]?GetMyCompanyFromDataBase();}