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 

BobsYourUncle