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

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

我正在浏览MSDN上的ASP.NET API参考,它似乎没有太多信息。 看起来相当有限。 但我找不到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 

Session.Abandon()

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

指示客户端浏览器清除会话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只将session-object中的布尔标志设置为true。 调用Web服务器可能会对此作出反应,但ASP不会立即执行任何操作。 (我用.net-Reflector检查了自己)

实际上,您可以通过点击浏览器的后退按钮一次继续使用旧会话,并继续正常浏览网站。

因此,总结一下:使用Session.Clear()并节省挫折感。

备注:我在ASP.net开发服务器上测试了这种行为。 实际的IIS可能表现不同。

Session.Abandon()这将破坏数据。

注意,这不一定会真正从用户中删除会话令牌,并且稍后的相同会话令牌可能会被拾取并创建为具有相同ID的新会话,因为它被认为是公平的游戏。

你杀了这样的会话:

 Session.Abandon() 

但是,如果您只想清空会话,请使用:

 Session.Clear() 
 Session.Abandon() 

是你应该使用的。 事情就是在幕后,asp.net会破坏会话,但会立即在下一页请求时给用户一个全新的会话。 因此,如果您在调用放弃后立即检查会话是否消失,则看起来它不起作用。

 Session["YourItem"] = ""; 

在.net剃刀网页上运行得很好。

Session.Abandon(); 对我来说也没用。

我必须编写它以使其工作的方式是这样的。 也可能适合你。

 HttpContext.Current.Session.Abandon();