【问题标题】:Session is not expiring?会话没有过期?
【发布时间】:2011-11-07 15:30:10
【问题描述】:

可能我的问题很愚蠢,但它让我发疯,你看我有这个应用程序,即使我使用了 Session.Abandon()、Session.Clear() 和 Session.Removeall,它的会话在注销后也不会过期()。我一直在互联网上搜索,但到目前为止没有运气,我真的希望我能得到一些帮助。假设我有用户 X,如果我执行以下操作,任何人都可以使用 X 的帐户登录:

1- 使用 X 的用户名和密码登录。 2-获取会话“.ASPXFORMSAUTH”信息。 3- 从 X 的帐户注销 4-例如使用火狐“添加cookie功能”添加会话“.ASPXFORMSAUTH”及其值。 5-输入网址并点击进入 页面刚刚打开,真的让我抓狂!!

提前致谢

【问题讨论】:

  • 您使用的是什么类型的会话?进程内?数据库服务器?还有什么?
  • “注销”前后的 SESSIONID 是否保持不变?
  • 页面是否以 same SessionId 显示?我希望一个新的会话会默默地开始。
  • 我相信 SESSIONID 保持不变,因为如果我使用 fire fox add cookie session 添加带有其值的 cookie,它只会让我登录...
  • 它显示了与我登录时相同的用户名...

标签: c# asp.net session asp.net-membership


【解决方案1】:

在这种情况下,您在 Session 中有一个附加标志(如“ACtive”),可以在注销期间设置为 false。基于此,您可以将用户重定向到登录或您想要的任何其他常规页面..

我不确定是否有明确的方法来处理这个问题,但我会按照我说的那样做。

用户已经使用 FormsAuthentication.Signout() 注销并试图通过使用相同的 cookie(他以某种方式访问​​它)来访问网站的经过身份验证的部分来破解系统的场景。 在这种情况下,微软的建议还建议使用持久性机制来记录/跟踪用户注销,并在随后的虚假请求中使用该信息将他重定向到登录页面(并再次清除 cookie)。

Reference:阅读备注部分中的项目符号点 3

【讨论】:

  • 感谢您的回答,我正在考虑这样的事情,但由于我使用的是 ASP.net 会员提供程序,我认为有一种更简单的方法。
  • -1 那是个坏主意。请改用 FormsAuthentication 方法。
  • 我一直在使用 FormsAuthentication.Signout() 但是当再次添加 cookie 时它仍然可以进行身份​​验证...
  • 甚至微软都推荐这种在用户注销时在介质中跟踪注销的方法(如 Session / in DB 中所说)。即使调用 Forms Authentication 注销,用户只要访问 cookie 就可以伪造 FormsAuthentication,除非您持久/跟踪用户注销并对其进行验证。
【解决方案2】:

你还需要调用 FormsAuthentication.SignOut()

【讨论】:

  • 我一直在调用 Session.RemoveAll()、Session.Abandon() 和 FormsAuthentication.Signout() 但问题仍然存在...... :(
猜你喜欢
  • 2012-08-25
  • 2016-06-22
  • 2012-07-22
  • 1970-01-01
  • 2013-10-13
  • 2013-07-08
  • 2010-10-07
  • 1970-01-01
  • 2016-08-04
相关资源
最近更新 更多