我在我的asp.net网络应用中使用了表单身份验证。当用户点击“退出”时按钮,我执行以下代码:
FormsAuthentication.SignOut();
FormsAuthentication.RedirectToLoginPage();
哪个有效。问题是,在退出之前,如果我复制了我当前所在的受限页面的网址,然后退出,我可以将网址粘贴回浏览器并返回限制页面,绕过登录页面。
我的网页配置如下:
<authentication mode="Forms">
<forms name="NoiseAdvisor" loginUrl="~/Login.aspx" timeout="20" slidingExpiration="true" cookieless="AutoDetect" protection="All" requireSSL="false" defaultUrl="~/Restricted/Home.aspx"/>
</authentication>
我有什么遗失的吗?
答案 0 :(得分:1)
您是否可以确认浏览器未缓存该页面,而您实际上是在看到缓存版本?按Shift-F5,查看页面是否刷新,或者是否重定向到登录页面。如果是这种情况,您可以使用缓存设置来确保用户无法返回页面。
答案 1 :(得分:0)
当您将URL“粘贴”到浏览器中时,它将为您提供页面的缓存版本(与上次访问相同的视图),除非您明确禁用了页面的客户端缓存。正如cdonner所提到的,按Shift + F5,我猜它会把你带到登录页面。
答案 2 :(得分:0)
您是否检查过以确保正确限制页面?
如:
<location path="RestrictedPage.aspx">
<system.web>
<authorization>
<deny users="?" />
<allow users="*" />
</authorization>
</system.web>
</location>
或者,您可以在限制页面上进行实际检查:
if (!(HttpContext.Current.User == null))
if (HttpContext.Current.User.Identity.IsAuthenticated)
// show restricted content
答案 3 :(得分:0)
这对我有用
public virtual ActionResult LogOff()
{
FormsAuthentication.SignOut();
foreach (var cookie in Request.Cookies.AllKeys)
{
Request.Cookies.Remove(cookie);
}
foreach (var cookie in Response.Cookies.AllKeys)
{
Response.Cookies.Remove(cookie);
}
return RedirectToAction(MVC.Home.Index());
}