我有以下代码
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")
以确定用户是否登录。
但它没有用。
情景:
Session("Login")
打印价值,但它仍有价值。我已调用Session.Abandon,但为什么Session("Login")
仍有价值?
它与ASPSESSIONID
Cookie有关吗?
我尝试手动删除该cookie并开始工作。
对此有何解释?
答案 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()后删除。