SessionID在ASP.NET MVC中不断变化,为什么?
我正在尝试跟踪某些内容,并使用SessionID作为对象的关键字
但是每2-3个会话变化的SessionID不应该保持不变吗?
HttpContext.Session.SessionID
是我使用的代码。
即使没有MVC,我也看到了这种情况。 如果我没有记错的话,ASP.NET会一直分配新的会话id,直到你将一些东西放到Sessionvariables中。
您应该初始化Global.asax.cs
的Session对象。
void Session_Start(object sender, EventArgs e) { HttpContext.Current.Session.Add("__MyAppSession", string.Empty); }
这样会话将不会改变,除非你的浏览器窗口closures。
我正在研究一个.NET MVC购物车应用程序,我补充说
Session["myVar"] = "1234";
到Default.aspx.cs代码中的Page_Load方法。 我还补充说
<%= this.Session.SessionID %>
到Site.Master页脚。 然后,我重build我的应用程序,并浏览我的应用程序的各个页面,页脚显示所有页面的预期相同的会话ID!
我会研究使用TempData来跟踪某事。
如果你看到seession ID,cookie甚至不会被发送到浏览器,除非它在服务器上使用。
所以当一个页面往返时没有当前的会话ID cookie,所以创build一个新的会话ID,因此是随机的。
这是合乎逻辑的,如果会话没有被使用,为什么麻烦把应用程序绑定到会话?
尝试在您的web.config中添加机器密钥:
在线密钥生成器: http : //aspnetresources.com/tools/keycreator.aspx似乎服务器重置客户端的机器密钥,并生成一个新的会话ID,每隔几分钟,这是远低于它应该。 不知道这是错误还是function:)
此外,您可以增加您的会话状态超时,这是我认为默认20分钟。
我有使用ASP.NET Web窗体相同的问题。 我只需要添加一个global.asax
文件到解决scheme,并为我修复。
总结从@jrojo和@Maxam上面的答案,我正在使用。
我正在使用AWS DynamoDB作为会话存储(超出了问题的范围,但给出了示例)。
通过NUGET添加包:安装包AWS.SessionProvider
更新Web.config以在appSettings中有键:
<add key="AWSAccessKey" value="XXX" /> <add key="AWSSecretKey" value="YYY" />
和会议提供商system.web:
<sessionState timeout="20" mode="Custom" customProvider="DynamoDBSessionStoreProvider"> <providers> <add name="DynamoDBSessionStoreProvider" type="Amazon.SessionProvider.DynamoDBSessionStateStore, AWS.SessionProvider" AWSProfilesLocation=".aws/credentials" Table="ASP.NET_SessionState" Region="us-east-1" /> </providers> </sessionState>
在会话启动时在global.asax中添加任何内容:
void Session_Start(object sender, EventArgs e) { HttpContext.Current.Session.Add("somethingToForceSessionIdToStick", string.Empty); }
validation通过添加到任何页面的剃刀。 刷新该页面,然后打开一个点击窗口并查看不同的会话:
@HttpContext.Current.Session.SessionID