如何终止会话或会话ID(ASP.NET / C#)

时间:2011-03-16 18:51:39

标签: c# asp.net session razor webmatrix

当用户点击退出按钮时,如何销毁会话(Session [“Name”])?

我正在浏览MSDN上的ASP.NET API参考,但似乎没有太多信息。看起来相当有限。但是我找不到ASP.NET Classes等的任何其他页面。

我试过了:

Session.Abandon();Session.Contents.Remove("Name");他们都没有工作。 (我在谷歌搜索的论坛中发现了这些)

9 个答案:

答案 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)

Session.Abandon()

这会将会话标记为已放弃,但会话实际上不会在此时被放弃,请求必须先完成。

答案 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();