我们在ASP.Net MVC3站点中启用了cookieless身份验证和会话。我们遇到的问题是,如果您注销用户,它不会使存在于无cookie字符串中的已创建的cookie /会话无效。方案如下:
用户使用cookieless身份验证登录站点,注册和登录;用户现在在其URL中有无cookie票证。用户通过创建桌面快捷方式或复制并粘贴来复制URL。
用户注销站点并调用FormAuthentication.SignOut()以使票证无效并重定向到登录页面。
用户现在可以简单地将该URL复制并粘贴到任何浏览器中,甚至可以转到另一台计算机,即使他们已经注销,该站点也会接受该身份验证票据;造成严重的安全风险。
有没有办法禁用所有以前的cookie,无论是否无cookie?目前,我们的流程适用于基于cookie的会话/登录;我们只需要一个无cookie的解决方案。
到目前为止,我们找到的唯一可行解决方案是跟踪数据库中的所有cookie并使数据库中的cookie无效,并检查数据库以确保当前cookie仍然有效。这会显着影响性能,因此我们希望在继续前进之前验证这是唯一/最佳解决方案。
由于
答案 0 :(得分:2)
基本上在url / F-long text /中存储了FormAuthentication票证。这张票在龋齿中自己过期(至少如果它不是持久的),在该时间跨度之后,该URL变为无效。所以我建议简单地减少时间跨度。如果显式注销是“必须拥有”,则只有在webfarm中并且没有某种扩展解决方案时才必须使用db。如果您有单个框,则可以使用HttpCache执行脏任务。另外我只使用UserID,而不是整个cookie(即在登录时将UserID在某些时间段内添加到活动用户ID范围内,在PostAuthorize上的Global.asax中检查用户是否在活动用户ID内,如果他是,则延长他的时间跨度并抛弃他否则,在注销时删除他)。
答案 1 :(得分:0)
在SignOut之后使用Session.Abandon()来放弃会话