0

IE 在 Abondoning 会话时似乎有点错误。这是被执行的全部代码:

Protected Sub logout_OnClick(ByVal sender As Object, ByVal e As EventArgs)
    Session.Abandon()
    Response.Redirect("login.aspx")
End Sub

它重定向到 login.aspx,但是当我将 url 更改为 default.aspx 时,它无需检查即可进入。在所有其他浏览器中,由于以下代码,它不会让您重定向:

   Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)

    If (Session("Naam") Is Nothing) Then
    Response.Redirect("login.aspx")
Else
      Label1.Text = "Welkom " + Session("Naam").ToString()  
End If
    End Sub

IE没有放弃会话有什么原因吗?

注意// 从来没有使用过登录控制

4

1 回答 1

2

尝试禁用/删除自动回发,然后重新测试您的页面。我猜想自动回发以某种方式使您的会话数据保持活动状态,也许它正在回发中使用?因此所有实例都不会被放弃?

编辑

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

例如,在以下脚本中,第三行打印值 Mary。这是因为 Session 对象在服务器完成脚本处理之前不会被销毁。

<% 
  Session.Abandon  
  Session("MyName") = "Mary" 
  Reponse.Write(Session("MyName")) 
%> 

如果您在后续网页上访问变量 MyName,则该变量为空。这是因为当包含前一个示例的页面完成处理时,MyName 与前一个 Session 对象一起被销毁。

当您在放弃会话后打开后续网页时,服务器会创建一个新的 Session 对象。您可以在这个新的 Session 对象中存储变量和对象。

以上来自 MSDN 网站。

这一切都意味着您的会话对象在您放弃它之后正在使用它。

我通常使用与您将成员注销会话相同的代码块。

Session.Abandon()
Response.Redirect("default.aspx")

在 global.asax 或 global.aspx 文件中也使用相同的代码。

于 2013-05-01T09:59:33.187 回答