注销时会话ID不会更改

时间:2015-10-12 14:31:11

标签: asp.net session cookies login

我几乎搜索了所有内容,但看起来太混乱了。我有一个登录控件如下:

<asp:Login ID="Login1" runat="server" Width="300px" onauthenticate="LoginControl_Authenticate" onloggedout="LoginStatus1_LoggedOut">

它登录用户并使用cookie进行身份验证。我还添加了额外的代码以确保整个会话在注销按钮上被销毁,如下所示;

void LoginStatus1_LoggedOut(Object sender, System.EventArgs e)
{
    HttpContext.Current.Session.Clear();
    HttpContext.Current.Session.Abandon();
    HttpContext.Current.Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId", ""));
    Response.Redirect("~/Login.aspx");
}

即使在注销后,会话ID仍然保持不变(例如,如果我注销它确实将我引导到我想要的登录页面。所以看起来它甚至没有执行上面的事件,因为我试过当我重新登录时,它仍然携带相同的会话ID。我在这里做错了什么 ? 另一件事是我将会话ID显示为:

 Session["SessionId"] = Session.SessionID;

我正在创建一个像

这样的新会话
 HttpContext.Current.Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId", ""));

这两个不同的会议是否相同?

我可以选择在注销时清除所有会话变量。

注意:我在Global.asax文件中也有这个但是没有帮助

 void Session_End(object sender, EventArgs e) 
{
    HttpContext.Current.Session.Clear();
    HttpContext.Current.Session.Abandon();
    HttpContext.Current.Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId", ""));
}

1 个答案:

答案 0 :(得分:1)

首先,您不希望直接操作ASP.Net会话cookie ASP.NET_SessionId

无论您是否登录,

会话状态都可用,因此您无需担心 Session.SessionID

换句话说,您只关心添加到Session的值对。

例如,清除会话状态后,myValue在以下代码中应为null。

protected void LoginStatus1_LoggedOut(Object sender, System.EventArgs e)
{
    Session.Clear();
    Session.RemoveAll();
    Session.Abandon();
    var myValue = Session["MyValue"];
    Response.Redirect("~/Login.aspx");
}