我几乎搜索了所有内容,但看起来太混乱了。我有一个登录控件如下:
<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", ""));
}
答案 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");
}