登出必须在asp.net中点击两次

本文关键字:两次 net asp | 更新日期: 2023-09-27 18:10:08

在我的主页我有签到。当我点击sign out按钮时,执行下面的代码

protected void singout_Click(object sender, EventArgs e)
    {
        Session.Abandon();
        if (Request.Cookies[FormsAuthentication.FormsCookieName] != null)
        {
            HttpCookie myCookie = new HttpCookie(FormsAuthentication.FormsCookieName);
            myCookie.Expires = DateTime.Now.AddDays(-1d);
            Response.Cookies.Add(myCookie);
            FormsAuthentication.SignOut();
            Response.Redirect("Home.aspx");
        }
    }

和在同一个母版页我的加载是

 protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            LoadData();
        }
    }
    private void LoadData()
    {
       Menu Items..
    }

当我点击签出菜单消失,因为我做它在基于角色的页面加载,所以这意味着角色权限存储在会话中,所以它得到清除,但页面必须重定向到主页。aspx,但它仍然在同一个页面,我不得不再次点击退出的页面重定向到home.aspx。我哪里错了

登出必须在asp.net中点击两次

只需使用FormsAuthentication即可方便注销操作,而无需触及代码中的cookie,也无需使用if语句。Forms Authentication将自动为您处理cookie状态。

这也将解决双重签出的问题,因为你重定向用户远离受保护的页面第一次签出按钮被点击。

protected void singout_Click(object sender, EventArgs e)
{
    Session.Abandon();
    //Removes the forms-authentication ticket from the browser:
    FormsAuthentication.SignOut(); 
    FormsAuthentication.RedirectToLoginPage();
    // ...or redirect the user to any place of choice outside the protected files. 
}

试试下面提到的代码

protected void singout_Click(object sender, EventArgs e) 
    { 
        Session.Abandon(); 
        if (Request.Cookies[FormsAuthentication.FormsCookieName] != null) 
        { 
            HttpCookie myCookie = new HttpCookie(FormsAuthentication.FormsCookieName); 
            myCookie.Expires = DateTime.Now.AddDays(-1d); 
            Response.Cookies.Add(myCookie); 
            FormsAuthentication.SignOut(); 
        }
        Response.Redirect("Home.aspx"); 
    }