当用户点击注销按钮时,如何销毁一个会话(Session["Name"])?
我正在查看MSDN上的ASP.NET API参考文档,但似乎没有太多信息。它似乎相当有限。但我找不到其他关于ASP.NET类等的页面。
我尝试过:
Session.Abandon();
和 Session.Contents.Remove("Name");
两者都无效。(我从Google搜索中的一个论坛中找到了这些方法)
当用户点击注销按钮时,如何销毁一个会话(Session["Name"])?
我正在查看MSDN上的ASP.NET API参考文档,但似乎没有太多信息。它似乎相当有限。但我找不到其他关于ASP.NET类等的页面。
我尝试过:
Session.Abandon();
和 Session.Contents.Remove("Name");
两者都无效。(我从Google搜索中的一个论坛中找到了这些方法)
Abandon
方法应该可行 (MSDN):
Session.Abandon();
如果你想从session中删除一个特定的项目,可以使用(MSDN):
Session.Remove("YourItem");
编辑:如果您只想清除一个值,可以执行以下操作:
Session["YourItem"] = null;
如果你想清除所有的键(key),请执行以下操作:
Session.Clear();
如果这些方法都没有起作用,那么可能出了一些问题。建议检查赋值的位置,并确认在清空值之后未被重新赋值。
简单的检查方式如下:
Session["YourKey"] = "Test"; // creates the key
Session.Remove("YourKey"); // removes the key
bool gone = (Session["YourKey"] == null); // tests that the remove worked
另外,建议指示客户端浏览器清除会话ID cookie值。
Session.Clear();
Session.Abandon();
Response.Cookies["ASP.NET_SessionId"].Value = string.Empty;
Response.Cookies["ASP.NET_SessionId"].Expires = DateTime.Now.AddMonths(-10);
根据我的测试结果:
Session.Abandon(); // Does nothing
Session.Clear(); // Removes the data contained in the session
Example:
001: Session["test"] = "test";
002: Session.Abandon();
003: Print(Session["test"]); // Outputs: "test"
Session.Abandon仅在会话对象中设置一个布尔标志为true。调用的Web服务器可能会对此做出反应,也可能不会,但是ASP没有立即采取任何行动。 (我通过.net-Reflector进行了检查)
实际上,您可以通过单击浏览器的后退按钮一次并继续正常浏览网站来继续使用旧会话。
因此,总结一下:请使用Session.Clear()以避免不必要的麻烦。
备注:我已在ASP.net开发服务器上测试了此行为。实际的IIS可能会有所不同。
Session.Abandon()
这会销毁数据。
请注意,这并不一定真正从用户中删除会话令牌,同一个会话令牌在以后的某个时间点可能会被捡起并创建为具有相同 ID 的新会话,因为它被认为是公平竞争的。
Session["YourItem"] = "";
你可以像这样终止一个会话:
Session.Abandon()
如果你只想清空会话,可以使用以下代码:
Session.Clear()
Session.Remove("Name");
或者使用 Session["Name"] = null;
来清除它。 - Chris CashwellSession.Abandon()
你应该使用的是这个。问题在于,ASP.NET 在幕后会销毁会话,但会立即在下一个页面请求中为用户提供全新的会话。因此,如果你在调用 abandon 后立即检查会话是否消失,它看起来好像没有起作用。
Session.Abandon();
对我也没有起作用。
我必须这样编写才能使其正常工作。这种方法可能对您也有用。
HttpContext.Current.Session.Abandon();