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

Isw*_*San 3 session iis-6 asp-classic

我有以下代码

cx5_login.asp

Session("Login") = "demo"
Run Code Online (Sandbox Code Playgroud)

cx5_logout.asp :

Session("Login") = ""
Session.Abandon
response.redirect "c5x_login.asp?C5xName=Login"
Run Code Online (Sandbox Code Playgroud)

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

设想:

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

我已经打电话给 Session.Abandon 但为什么 Session("Login")仍然有价值?和ASPSESSIONIDcookie有关吗?我尝试手动删除该 cookie,它的工作。

对此有什么解释吗?

Lan*_*art 5

什么尼尔 说的并没有错,但它是不正确或者,问题是不断趋于两个问题提问者或人回答与ASP.Net混淆经典ASP。

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

Session.Abandon()应该用于完全处置包括Session.SessionID.

但是有一个洞穴探险者;

来自MSDN 库的引用- Session.Abandon()

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

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

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

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

  • 是的,我正在使用 mozilla 和 IE。我试过登录,注销,关闭浏览器,然后直接输入主页(用户必须先登录),我仍然可以读取Session值。仅供参考,我正在使用 IIS 6 (2认同)