我的会话有一个奇怪的问题。即使在互联网上搜索了几天之后我也没有找到解决办法,我觉得很奇怪没有其他人似乎遇到这个问题,这让我觉得这可能是我做错了。< / p>
如果我登录我的网站并访问使用[Authorize]属性修饰的页面(即它要求用户登录才能访问它),请使用fiddler保存请求,注销并重新发出请求fiddler一个人会期望失败(或者至少将我重新指向登录页面)但不是,它会返回页面,好像我还在登录一样。
当我退出时,这就是我所做的(我正在使用asp.net表单身份验证)
FormsAuthentication.SignOut();
Session.Clear();
Session.Abandon();
Session.RemoveAll();
Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId",""));
这应该有用......但事实并非如此。
如果有人想知道这是我正在使用的: IIS 7.5 MVC 3.0 .NET 4.0
答案 0 :(得分:3)
如果我登录我的网站并访问使用[授权]属性修饰的页面(即 它要求用户登录才能访问它,保存 与fiddler的请求,注销并重新发出请求 小提琴手会期望失败
为什么你会期待这样的事情?表单身份验证使用cookie来跟踪登录的用户。当您FormsAuthentication.SignOut();
执行所有操作时,您将删除身份验证cookie,以便在此浏览器的后续请求中不再发送cookie,并且服务器认为用户未登录。如果另一方面,你已经用Fiddler捕获了一个有效的cookie,你完全有能力向服务器发送一个有效的请求(显然这个cookie有效的时间)。服务器上没有任何东西可以让你知道你使用过fiddler,对吗?这完全是无国籍的。
如果你想避免这种行为(这是设计),你必须在服务器上的某个地方跟踪在线用户列表,或者在数据库中添加一些关于用户的标志,指示他是在线还是不。然后,您将编写一个自定义Authorize
属性,该属性将在此集中存储中检查是否允许用户登录。当他退出时你会改变这个标志。显然,如果他关闭了他的浏览器,你将无法更改标志,但如果他正常退出,你就会知道即使有人抓住了身份验证cookie,他也无法使用它来发出有效请求。 / p>