把我的头撞得太长了点。如何防止用户在使用FormsAuthentication.SignOut注销后浏览站点的页面?我希望这样做:
FormsAuthentication.SignOut();
Session.Abandon();
FormsAuthentication.RedirectToLoginPage();
如果我直接输入一个URL,我仍然可以浏览到这个页面。我已经有一段时间没有使用滚动安全性了,所以我忘记了为什么这个不起作用了。
发布于 2009-08-20 15:22:51
用户仍然可以浏览您的网站,因为当您调用FormsAuthentication.SignOut()
时不会清除cookies,而且每次新请求时都会对cookies进行身份验证。在MS文档中,是说cookie将被清除,但他们没有,bug?这和Session.Abandon()
完全一样,cookie仍然存在。
您应该将您的代码更改为:
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。
发布于 2009-01-05 05:00:13
在我看来,您没有在中正确设置您的web.config授权部分。请参见下面的示例。
<authentication mode="Forms">
<forms name="MyCookie" loginUrl="Login.aspx" protection="All" timeout="90" slidingExpiration="true"></forms>
</authentication>
<authorization>
<deny users="?" />
</authorization>
发布于 2010-03-22 08:26:52
这里的关键是你说“如果我直接输入一个URL ...”。
默认情况下,在forms身份验证下,浏览器会为用户缓存页面。因此,直接从浏览器的地址框下拉菜单中选择一个URL,或者键入它,就可以从浏览器的缓存中获取页面,而再也不会返回到服务器来检查身份验证/授权。解决此问题的方法是在每个页面的Page_Load事件中或在基页的OnLoad()中防止客户端缓存:
Response.Cache.SetCacheability(HttpCacheability.NoCache);
您可能还想调用:
Response.Cache.SetNoStore();
https://stackoverflow.com/questions/412300
复制相似问题