当用户点击退出按钮时,如何销毁会话(Session [“Name”])?
我正在浏览MSDN上的ASP.NET API参考,但似乎没有太多信息。看起来相当有限。但是我找不到ASP.NET Classes等的任何其他页面。
我试过了:
Session.Abandon();
和
Session.Contents.Remove("Name");
他们都没有工作。 (我在谷歌搜索的论坛中发现了这些)
答案 0 :(得分:57)
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
答案 1 :(得分:7)
指示客户端浏览器清除会话ID cookie值也是一个好主意。
{{1}}
答案 2 :(得分:5)
这会将会话标记为已放弃,但会话实际上不会在此时被放弃,请求必须先完成。
答案 3 :(得分:3)
从我测试的内容:
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仅将session-object中的布尔标志设置为true。调用Web服务器可能会对此作出反应,但ASP会导致 NO 立即执行操作。 (我用.net-Reflector检查了自己)
事实上,您可以通过点击浏览器的后退按钮一次继续使用旧会话,并继续正常浏览网站。
因此,总结一下:使用Session.Clear()并避免沮丧。
备注:我在ASP.net开发服务器上测试了这种行为。实际的IIS可能表现不同。
答案 4 :(得分:1)
Session.Abandon()
这会破坏数据。
请注意,这不一定会真正从用户中删除会话令牌,并且以后相同的会话令牌可能会被拾取并创建为具有相同ID的新会话,因为它被认为是公平的游戏。使用。
答案 5 :(得分:1)
你杀了这样一个会话:
Session.Abandon()
但是,如果您只想清空会话,请使用:
Session.Clear()
答案 6 :(得分:1)
Session.Abandon()
是你应该使用的。事情就是在幕后,asp.net会破坏会话,但会立即在下一页请求时给用户一个全新的会话。因此,如果您在调用放弃之后检查会话是否已经消失,那么它看起来似乎无效。
答案 7 :(得分:1)
Session["YourItem"] = "";
在.net razor网页上效果很好。
答案 8 :(得分:1)
Session.Abandon();
也不适合我。
我必须编写它以使其工作的方式是这样的。也可能适合你。
HttpContext.Current.Session.Abandon();