我单击刷新按钮,应重新启动会话:

protected void btnRefresh_Click(object sender, EventArgs e)
{

    HttpContext.Current.Session.Abandon();
    HttpCookie mycookie = new HttpCookie("ASP.NET_SessionId");
    mycookie.Expires = DateTime.Now.AddDays(-1);
    Response.Cookies.Add(mycookie);
    LblSessionID.Text = HttpContext.Current.Session.SessionID+
        " test btnRefresh_Click";
    LblIsNewSession.Text = Session.IsNewSession.ToString();
}


但是,单击该按钮时,LblSessionID中的SessionID值仍显示旧值,但另一个标签LblIsNewSession对于IsNewSession将其显示为true。然后,当我使用具有LblSessionID的asp.net控件(如下拉列表)时,autopostback="true"将反映实际的SessionID值,并从那里粘贴SessionID。

我确实使用global.asax

知道为什么LblSessionID表现不正常,并正在等待下一次回发开始反映实际值吗?

当我启动Web应用程序时,问题是相同的-LblSessionID显示不同的值,然后在第一次回发后更改,并从那里保持不变。

最佳答案

这就是它的工作方式-如果您Abandon会话,则在下一个请求之前它不会反映出来。如果您考虑一下,这是有道理的...

假设您有一个访问您的网站并获得会话ID为123的用户(我知道这并不反映实际值)。当您单击按钮以获取新的会话ID时,用户的请求来自旧的会话,这是该Request期间反映的值。一旦重置会话(或放弃会话或进行其他操作),用户将获得新的会话ID 321,随后的Request将反映该新会话ID。

10-06 12:06