首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >FormsAuthentication.SignOut()不会注销用户

FormsAuthentication.SignOut()不会注销用户
EN

Stack Overflow用户
提问于 2009-01-05 04:48:42
回答 17查看 141.6K关注 0票数 150

把我的头撞得太长了点。如何防止用户在使用FormsAuthentication.SignOut注销后浏览站点的页面?我希望这样做:

代码语言:javascript
复制
FormsAuthentication.SignOut();
Session.Abandon();
FormsAuthentication.RedirectToLoginPage();

如果我直接输入一个URL,我仍然可以浏览到这个页面。我已经有一段时间没有使用滚动安全性了,所以我忘记了为什么这个不起作用了。

EN

回答 17

Stack Overflow用户

回答已采纳

发布于 2009-08-20 15:22:51

用户仍然可以浏览您的网站,因为当您调用FormsAuthentication.SignOut()时不会清除cookies,而且每次新请求时都会对cookies进行身份验证。在MS文档中,是说cookie将被清除,但他们没有,bug?这和Session.Abandon()完全一样,cookie仍然存在。

您应该将您的代码更改为:

代码语言:javascript
复制
FormsAuthentication.SignOut();
Session.Abandon();

// clear authentication cookie
HttpCookie cookie1 = new HttpCookie(FormsAuthentication.FormsCookieName, "");
cookie1.Expires = DateTime.Now.AddYears(-1);
Response.Cookies.Add(cookie1);

// clear session cookie (not necessary for your current problem but i would recommend you do it anyway)
SessionStateSection sessionStateSection = (SessionStateSection)WebConfigurationManager.GetSection("system.web/sessionState");
HttpCookie cookie2 = new HttpCookie(sessionStateSection.CookieName, "");
cookie2.Expires = DateTime.Now.AddYears(-1);
Response.Cookies.Add(cookie2);

FormsAuthentication.RedirectToLoginPage();

HttpCookie位于System.Web命名空间中。MSDN Reference

票数 217
EN

Stack Overflow用户

发布于 2009-01-05 05:00:13

在我看来,您没有在中正确设置您的web.config授权部分。请参见下面的示例。

代码语言:javascript
复制
<authentication mode="Forms">
  <forms name="MyCookie" loginUrl="Login.aspx" protection="All" timeout="90" slidingExpiration="true"></forms>
</authentication>
<authorization>
  <deny users="?" />
</authorization>
票数 19
EN

Stack Overflow用户

发布于 2010-03-22 08:26:52

这里的关键是你说“如果我直接输入一个URL ...”。

默认情况下,在forms身份验证下,浏览器会为用户缓存页面。因此,直接从浏览器的地址框下拉菜单中选择一个URL,或者键入它,就可以从浏览器的缓存中获取页面,而再也不会返回到服务器来检查身份验证/授权。解决此问题的方法是在每个页面的Page_Load事件中或在基页的OnLoad()中防止客户端缓存:

代码语言:javascript
复制
Response.Cache.SetCacheability(HttpCacheability.NoCache);

您可能还想调用:

代码语言:javascript
复制
Response.Cache.SetNoStore();
票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/412300

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档