我需要一种方法来告知ASP.NET“重定向到页面”之前/之后“杀死当前会话并重新开始”.
这是我要做的:
1)在ASP.NET应用程序的母版页(或Global.asax)中检测会话何时到期.
2)如果会话已过期,请将用户重定向到页面,告知他们会话已过期.在此页面上,它将等待5秒钟,然后将用户重定向到应用程序的主页面,或者他们可以点击一个链接,如果他们愿意,尽快到达.
3)用户到达主页,再次开始使用应用程序.
好的,到目前为止,我有步骤1和2覆盖.我有一个通过使用IsNewSession属性和ASP.NET会话ID cookie值来检测会话到期的功能.如果它检测到过期的会话重定向,则等待五秒钟,然后TRIES进入主页面.
问题是当它尝试重定向时,它会访问主页面中的一部分来检测已过期的会话,并返回true.我尝试调用Session.Abandon(),Session.Clear(),甚至将会话设置为NULL,没有运气.
有人在此之前不得不面对这个问题,所以我对社区有信心有一个很好的解决方案.提前致谢.
解决方法
您正在描述的问题发生是因为asp.net正在重用sessionid,如果sessionid仍然存在于auth cookie中,当您调用abandon()时,它将重新使用它,则需要显式创建一个新的sessionid afaik:
HttpCookie mycookie = new HttpCookie("ASP.NET_SessionId"); mycookie.Expires = DateTime.Now.AddDays(-1); Response.Cookies.Add(mycookie);