当用户单击注销按钮时,如何销毁会话 (Session["Name"])?
我正在查看 MSDN 上的 ASP.NET API Reference,它似乎没有太多信息。似乎相当有限。但我找不到 ASP.NET 类等的任何其他页面。
我努力了:
Session.Abandon();
他们
Session.Contents.Remove("Name");
都不工作。(我在谷歌搜索的论坛中找到了这些)
该Abandon
方法应该有效(MSDN):
Session.Abandon();
如果要从会话中删除特定项目,请使用 ( MSDN ):
Session.Remove("YourItem");
编辑:如果你只想清除一个值,你可以这样做:
Session["YourItem"] = null;
如果要清除所有键,请执行以下操作:
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。调用网络服务器可能对此作出反应或不作出反应,但ASP不会立即采取行动。(我自己用 .net-Reflector 进行了检查)
事实上,您可以通过点击浏览器的后退按钮一次来继续使用旧会话,然后继续正常浏览整个网站。
所以,总结一下:使用 Session.Clear() 并避免沮丧。
备注:我已经在 ASP.net 开发服务器上测试过这种行为。实际的 IIS 可能表现不同。
Session.Abandon()
这将破坏数据。
请注意,这不一定会真正从用户那里删除会话令牌,并且稍后可能会拾取相同的会话令牌并创建为具有相同 id 的新会话,因为它被认为是公平的游戏。
你像这样杀死一个会话:
Session.Abandon()
但是,如果您只想清空会话,请使用:
Session.Clear()
Session["YourItem"] = "";
在 .net razor 网页中效果很好。
Session.Abandon()
是你应该使用的。事情在幕后 asp.net 会破坏会话,但会立即在下一页请求上为用户提供一个全新的会话。因此,如果您正在检查会话是否在调用放弃后立即消失,那么它看起来好像不起作用。
Session.Abandon();
也没有为我工作。
我必须编写它以使其工作的方式是这样的。也可能对你有用。
HttpContext.Current.Session.Abandon();