我单击刷新按钮,应重新启动会话:
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。