有没有一种方法可以从服务器中使表单身份验证会话失效?
我知道cookie有嵌入式过期,但我想对服务器进行额外检查,以验证用户是否未手动注销。当用户手动注销时,我会调用FormsAuthentication.SignOut()
来使cookie过期。但是,如果我使用开发人员工具将cookie设置回其原始值,我仍然会登录。
我能想到的一个选择是将“登录ID”嵌入到故障单的UserData
部分。通过这个,我的意思是每个登录都记录在一个数据库中,并且有一个与之关联的id。当用户手动注销时,我可以更新数据库记录以显示他们已经这样做了。但是,这需要我在每次用户进行身份验证时查询数据库(不理想)。我可以维护一个缓存,但看起来这将是很多工作,我希望有一个更简单的方法:)
谢谢!
答案 0 :(得分:4)
MSDN documents the limitations。要点:使用服务器上的持久存储来记录用户何时退出网站。
答案 1 :(得分:2)
存储“登录ID”的替代方法是更新用户记录中的“登录状态”字段。
用户登录时将其设置为“已登录”。
您将其与FormsAuthentication.SignOut
一起设置为“已注销”。
然后,在处理管道的早期某处你检索用户记录(稍后你可能仍需要它!)并检查标志。如果该标志是“已注销”,则表示出错了,您使用401(或其他代码表示身份验证问题)结束请求。
当然,使用短cookie过期时间以及滑动过期和SSL。这不会阻止cookie被自己劫持,但会降低其他人重复使用cookie的风险。