注销后表单身份验证会话有效

时间:2012-03-01 20:55:40

标签: asp.net authentication forms-authentication

有没有一种方法可以从服务器中使表单身份验证会话失效?

我知道cookie有嵌入式过期,但我想对服务器进行额外检查,以验证用户是否未手动注销。当用户手动注销时,我会调用FormsAuthentication.SignOut()来使cookie过期。但是,如果我使用开发人员工具将cookie设置回其原始值,我仍然会登录。

我能想到的一个选择是将“登录ID”嵌入到故障单的UserData部分。通过这个,我的意思是每个登录都记录在一个数据库中,并且有一个与之关联的id。当用户手动注销时,我可以更新数据库记录以显示他们已经这样做了。但是,这需要我在每次用户进行身份验证时查询数据库(不理想)。我可以维护一个缓存,但看起来这将是很多工作,我希望有一个更简单的方法:)

谢谢!

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:2)

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

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

然后,在处理管道的早期某处你检索用户记录(稍后你可能仍需要它!)并检查标志。如果该标志是“已注销”,则表示出错了,您使用401(或其他代码表示身份验证问题)结束请求。

当然,使用短cookie过期时间以及滑动过期和SSL。这不会阻止cookie被自己劫持,但会降低其他人重复使用cookie的风险。