为什么会话放弃不起作用?

时间:2014-05-01 08:01:41

标签: session asp-classic iis-6

我有以下代码

cx5_login.asp

Session("Login") = "demo"

cx5_logout.asp:

Session("Login") = ""
Session.Abandon
response.redirect "c5x_login.asp?C5xName=Login"

我想知道Session.Abandon是否会移除Session("Login")? Currenly,我检查Session("Login")以确定用户是否登录。 但它没有用。

情景:

  1. 用户登录
  2. 用户注销
  3. 我从Session("Login")打印价值,但它仍有价值。
  4. 我已调用Session.Abandon,但为什么Session("Login")仍有价值? 它与ASPSESSIONID Cookie有关吗? 我尝试手动删除该cookie并开始工作。

    对此有何解释?

2 个答案:

答案 0 :(得分:3)

什么Neel say's不是错的,但它也不对,问题是并且经常会出现问题的问题,或者人们回答混乱的经典ASP与ASP。净。

如果您的问题与经典ASP相关,那么在谈论Session对象时,您需要考虑以下内容。

Session.Abandon()应该用于完全处理包含Session.SessionID

的会话

但有一个洞穴;

  

来自MSDN Library - Session.Abandon()

的引用      

"当调用Abandon方法时,当前的Session对象排队等待删除,但在处理完当前页面上的所有脚本命令之前,实际上并未删除。这意味着您可以在调用Abandon方法的同一页面上访问存储在Session对象中的变量,但不能访问任何后续网页。"

这意味着在当前页面的上下文中,您的会话仍然可用,直到您转到另一个实际处理Session对象的页面为止。

如果您在注销页面后没有重定向,您的会话仍然可以访问,但请放心,任何离开该页面后访问它的尝试都将失败。

  

由于测试不会在注销后自动重定向,但会为用户提供一个按下的链接,看看是否有相同的行为。

答案 1 :(得分:0)

由于以下原因,您需要在Session.Clear()之前Session.Abandon

Session.Clear() 将清除所有键的值,但不会导致会话结束事件触发。

Session.Abandon() 不会清除当前请求中的值。如果请求另一个页面,则该值将消失。然而,放弃将抛出事件。

最好使用 Session.Clear()而不是使用 Session.Abandon(),因为调用会话后,会话中的值仍然存在。放弃()但在调用 Session.Clear()后删除。