Cookies注销剃须刀删除

时间:2013-05-21 15:14:59

标签: c# asp.net asp.net-mvc razor

我有一个asp应用程序,我需要在注销操作中删除所有当前会话的cookie:

 public ActionResult Logout()
        {
            Upload.Models.CompteModels.Connected = false;
            return RedirectToAction("Login", "Account");
         }

现在我使用带有布尔值的静态类CompteModels来测试用户是否在进行身份验证,但这并不高效。所以我认为我必须在我退出时删除所有cookie。

我该怎么做?

3 个答案:

答案 0 :(得分:3)

静态属性在所有用户之间共享,因此使用静态属性来确定用户是否已登录将无法正常工作,因为这将注销所有用户或将其登录。

您可以使用Session.Abandon放弃会话,或使用HttpResponse.Cookies集合删除Cookie,并为其过期写一个Cookie。

答案 1 :(得分:2)

如果您的意思是删除会话数据并删除会话Cookie,请参阅here了解如何执行此操作。

答案 2 :(得分:1)

您可以创建一个名为LoggedIn的会话变量或类似的东西,并在您的注销操作中清除它。然后在您的登录操作中,您需要检查此会话。

 public ActionResult Logout()
 {
    Upload.Models.CompteModels.Connected = false;
    Session.Remove("LoggedIn");
    return RedirectToAction("Login", "Account");
 }

 public ActionResult Login()
 {
    // check for session var, redirect to landing page maybe?
    if(Session["LoggedIn"] == null) 
    {
       RedirectToAction("Home", "Index");
    }
    else
    {
       Session.Add("LoggedIn", true);
    }
    return RedirectToAction("TargetPage", "TargetAction");
 }

只有一个想法,取决于您希望用户被重定向到的位置,TargetPage可能是管理区域或类似的东西。