【问题标题】:Why Does Session Abandon Not Work?为什么会话放弃不起作用?
【发布时间】:2014-05-01 08:01:40
【问题描述】:

我有以下代码

cx5_login.asp

Session("Login") = "demo"

cx5_logout.asp:

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

我想知道Session.Abandon 是否会删除Session("Login")? 目前,我正在检查Session("Login") 以确定用户是否登录。 但它不起作用。

场景:

  1. 用户登录
  2. 用户注销
  3. 我从Session("Login") 打印值,它仍然有价值。

我已经调用了 Session.Abandon 但为什么 Session("Login") 仍然有价值? 它与ASPSESSIONID cookie 有关吗? 我尝试手动删除该 cookie,它的工作。

对此有何解释?

【问题讨论】:

    标签: session asp-classic iis-6


    【解决方案1】:

    Neelsay's 没有错,但也不是对的,问题是并且经常是提问者或回答混淆 Classic ASP 与 ASP.Net 的人。

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

    Session.Abandon() 应该用于完全处置包括Session.SessionID 在内的会话。

    但是有一个秘密;

    引用MSDN Library - Session.Abandon()

    "当调用 Abandon 方法时,当前 Session 对象排队等待删除,但直到当前页面上的所有脚本命令都处理完后才真正删除。这意味着您可以访问存储在Session 对象与调用 Abandon 方法在同一页面上,但不在任何后续网页中。”

    这意味着在当前页面的上下文中,您的 Session 仍然可用,直到您转到另一个页面,Session 对象才真正被释放。

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

    作为测试,注销后不会自动重定向,而是给用户一个链接,让他们按下,看看你是否得到相同的行为。

    【讨论】:

    • 但是我在Session.Abandon()之后仍然得到了会话值并重定向到另一个页面。为什么?
    • @IswantoSan 如果您手动更改到另一个页面而不是进行重定向,会发生什么情况,您还能看到会话吗?
    • @IswantoSan 所有浏览器的行为都一样吗?
    • 是的,我使用的是 mozilla 和 IE。我试过登录,注销,关闭浏览器,然后直接输入主页(即用户必须先登录),我仍然可以读取会话值。仅供参考,我使用的是 IIS 6
    猜你喜欢
    • 2013-02-10
    • 2017-12-12
    • 1970-01-01
    • 2017-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-10
    • 2012-02-12
    相关资源
    最近更新 更多