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