2012-03-01 26 views
3

有没有一种很好的方法来使服务器上的表单身份验证会话无效?注销后表单身份验证会话有效

据我所知,该cookie有一个嵌入式过期,但我想在服务器上做一个额外的检查,以验证用户没有手动退出。当用户手动注销时,我会拨打FormsAuthentication.SignOut(),这会使Cookie过期。但是,如果我使用开发人员工具将cookie设置恢复为原始值,我仍然登录。

我能想到的一个选项是将“登录ID”嵌入票证的UserData部分。通过这个,我的意思是每个登录都记录在一个数据库中,并且有一个与它关联的ID。当用户手动注销时,我可以更新数据库记录以显示他们已经这样做。然而,这需要我每次用户被认证时都要查询数据库(不理想)。我可以保持一个缓存,但它似乎会是很多工作,我希望有一个更简单的方法:)

谢谢!

回答

3

MSDN documents the limitations。要点:使用服务器上的持久性存储来记录用户何时退出Web站点。

+0

不完全是我所希望的,但我认为你是正确的。谢谢:) – dana 2012-03-01 21:20:42

2

存储“登录ID”的替代方法是更新用户记录中的“登录状态”字段。

您在用户登录时将其设置为“已登录”。 您将其与FormsAuthentication.SignOut一起设置为“已注销”。

然后,在处理管道的早期某处,您可以检索用户记录(稍后您可能仍然需要它!)并检查标记。如果该标志是“已注销”,那么出现了问题,并且用401(或另一个代码来表示认证问题)结束请求。

当然,还可以使用短的cookie过期时间以及滑动过期和SSL。这并不能防止cookie被自己劫持,但降低了别人重复使用cookie的风险。

+0

感谢您的提示。这里的缺点是,如果用户使用多个浏览器登录(理论上可能),他们可能会遇到一些奇怪的行为。 – dana 2012-03-01 21:21:45