Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 禁止用户在注销后导航。_Asp.net_Asp.net Mvc 3 - Fatal编程技术网

Asp.net 禁止用户在注销后导航。

Asp.net 禁止用户在注销后导航。,asp.net,asp.net-mvc-3,Asp.net,Asp.net Mvc 3,我的应用程序是Asp.NETMVC3,我有两个用户(管理员和普通用户)。我维护登录用户的cookies 下面是我的Cookie代码。 public static void setCookiestring Password ,string UserName) { HttpCookie MyCookie= new HttpCookie("MyCookies"); MyCookie["Password"] = Password; MyCookie["UserName"

我的应用程序是Asp.NETMVC3,我有两个用户(管理员和普通用户)。我维护登录用户的cookies

下面是我的Cookie代码。

 public static void setCookiestring Password ,string UserName)
 {
     HttpCookie MyCookie= new HttpCookie("MyCookies");
     MyCookie["Password"] = Password;
     MyCookie["UserName"] = UserName;
     MyCookie.Expires.Add(new TimeSpan(0,30,0));
     HttpContext.Current.Response.Cookies.Add(MyCookies);
 }
下面是用户注销时我的cookie如何过期的代码

public static bool logout()
        {
            HttpCookie MyCookie= new HttpCookie("MyCookies");

            MyCookie.Expires = DateTime.UtcNow.AddDays(-1);
            HttpContext.Current.Response.Cookies.Add(MyCookies);
            return true;
        }
我已尝试在控制器的每个索引()上检查Cookie。如果Cookie存在,它应导航到所需页面,否则应返回主页

 if (!Cookie.CheckCookie())
    {
       //use the current url for the redirect       
       filterContext.HttpContext.Response.Redirect("~/Home/Index", true);
    } 
当用户单击“注销”时,他们被重定向到主页,但单击“上一步”按钮后,可以查看最后访问的页面。 我能做些什么,当用户点击注销时,如果他们点击后退按钮,他们仍然会被重定向到主页,而不是最后访问的页面。
请建议

防止这种情况的一种方法是通过设置适当的响应头,将所有经过身份验证的页面从客户端缓存中排除。您可以查看,以获取可应用于站点已验证部分的操作筛选器的示例。

@SamMKhan,因此您的意思是,即使索引操作用NoCache属性修饰,您仍然可以使用
返回
按钮导航回它?我测试它时不是这样的。看看我的NoCache代码公共类NoCache:ActionFilterAttribute{public override void OnResultExecuting(ResultExecutingContext filterContext){var response=filterContext.HttpContext.response;response.Cache.SetExpires(DateTime.UtcNow.AddDays(-1));response.Cache.SetValidUntilExpires(false);response.Cache.SetRevalidation(HttpCacheRevalidation.AllCaches);response.Cache.SetCacheability(HttpCacheability.NoCache);response.Cache.SetNoStore();}
这是我的主控制器
[NoCache]公共操作结果索引(){return View();}
i哪里出错了,还是需要做进一步的更改?@SamMKhan,是的,这是适合我的正确代码。但是,是索引操作在应用程序中表示经过身份验证的资源吗?您应该仅使用NoCache属性来修饰作为应用程序身份验证区域一部分的操作/控制器这样,一旦用户注销,他就不能使用“上一步”按钮返回到这些操作中的一个,并且缓存中不会提供这些操作。超级完美解决方案@Darin