IIS7应用程序池重启后ASP.NET in-proc session未丢失

6

我有一个在IIS7下运行的ASP.NET MVC应用程序。它使用默认的in-proc会话管理,根据我所读的所有内容,应该在应用程序池重新启动后丢失用户的会话。

然而,它似乎没有丢失。即使进行IIS重置也不会丢失会话。

IIS7中是否有一些变化使会话保持活动状态?


1
在重启后,您是否确实看到相同的会话数据,还是只有相同的会话ID? - stevemegson
你能提供你的web.config中的会话配置部分吗?听起来你正在使用状态服务器或SQL服务器,而不是默认的进程内服务器。 - David Hoerster
@stevemegson。可能只是会话ID。我可能误解了会话数据的存储方式。在应用程序重新启动后,用户仍然登录,但我没有在会话中存储任何其他数据。 然而,用户应该注销,因为服务器应该丢失其会话ID,不是吗? - Mr. Flibble
这是一个简单明了的代码: <sessionState mode="InProc" cookieName="mycookie" cookieless="false" timeout="60" /> - Mr. Flibble
由于Cookie的存在,用户未被注销。 - jcolebrand
显示剩余2条评论
1个回答

3
由于cookie重放攻击,你的浏览器会发送旧的身份验证票证的cookie,而Web服务器不会存储有效和过期的身份验证票证以供后续比较。如果恶意用户获取到有效的表单身份验证cookie,则会使您的站点容易受到重放攻击。为了提高使用表单身份验证cookie的安全性,请参阅下面的MSDN链接:

http://msdn.microsoft.com/en-us/library/system.web.security.formsauthentication.signout.aspx


为了在使用表单身份验证 cookie 时提高安全性,您应该执行以下操作:
- 将 SlidingExpiration 属性设置为 false,使用绝对过期时间来限制劫持 cookie 的窗口。 - 仅通过 SSL 发行和接受身份验证 cookie。将 RequireSSL 属性设置为 true 并在整个网站下运行 SSL 可以确保 ASP.NET 永远不会在非 SSL 连接上向浏览器发送身份验证 cookie;但是,客户端可能不会遵守 cookie 上的安全设置。这意味着客户端可能会在非 SSL 连接上发送表单身份验证 cookie,从而使其容易被劫持。您可以通过在整个网站下运行 SSL 来防止客户端在明文中发送表单身份验证 cookie。 - 在服务器上使用持久化存储记录用户何时注销了网站,并使用应用程序事件(如 PostAuthenticateRequest 事件)确定当前用户是否使用表单身份验证进行了身份验证。如果用户使用表单身份验证进行了身份验证,并且持久化存储中的信息表明用户已注销,则立即清除身份验证 cookie 并将浏览器重定向回登录页面。成功登录后,更新存储以反映用户已登录。使用此方法时,您的应用程序必须跟踪用户的登录状态,并强制处于闲置状态的用户注销。
(.NET Framework 1.1、2.0、3.0、3.5、4.0、4.5、4.5.1、4.5.2、4.6、4.6.1、4.6.2、4.7、4.7.1、4.7.2、4.8、4.8.1)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接