我想将一些数据保存到会话状态。当用户首次通过表单身份验证登录时,我需要关闭此数据。我需要此会话状态变量具有与表单身份验证票证到期相同的生命周期。有没有办法确保这两个保持同步?
答案 0 :(得分:3)
有没有办法确保这两个保持同步?
两者都有web.config中的超时值,您可以将其设置为相同的值。现在说这就是你的问题可能开始的地方。表单身份验证cookie可能具有滑动到期设置,而会话则没有。因此,如果您希望两个超时值匹配,请确保为身份验证cookie禁用此滑动过期。而这仅仅是个开始。对于会话,您可以选择存储位置:Off,InProc,StateServer,SqlServer。
当您使用Off(我个人使用的)时,ASP.NET会话被禁用,您基本上没有任何会话。
当您将其设置为InProc(默认值)时,会话将存储在内存中。除了IIS可以决定在不同情况下回收AppDomain:一段时间不活动,达到某个CPU /内存阈值,...这基本上意味着如果会话存储在内存中并且AppDomain由Web服务器卸载你松散存储在此会话中的所有内容,而显然,身份验证cookie仍然有效。
StateServer和SQLServer是两种不同的进程外会话存储模式,其中信息不再存储在Web服务器的内存中,并且可以在AppDomain被回收后继续存在。
所以基本上总结一下,很难以可靠的方式同步ASP.NET会话生命周期和ASP.NET表单身份验证cookie生命周期。我完全没有使用ASP.NET会话来解决这个问题。