会话没有被放弃 - 使用菜单控制?

时间:2011-04-20 17:08:39

标签: asp.net vb.net session authentication menu

我有一个菜单控件,我已经添加了一个Logout菜单项。代码如下:

Protected Sub Menu1_MenuItemClick(sender As Object, e As System.Web.UI.WebControls.MenuEventArgs) Handles Menu1.MenuItemClick
    If e.Item.Value = "Logout" Then
        Session.Abandon()
        FormsAuthentication.SignOut()
        Response.Redirect("login.aspx")
    End If
End Sub

当我退出时,重定向很好,但它似乎没有放弃会话。我已经使用LinkBut​​ton在另一个应用程序中成功实现了注销,这似乎是一个专门用于Menu控件的问题?

3 个答案:

答案 0 :(得分:1)

逻辑上它不可能但似乎在一个会话被放弃之后并且在进入login.aspx页面之前,你的会话在某个地方再次启动。特别检查主页加载。

答案 1 :(得分:1)

我看到了一个关于你问题的类似主题......所以我觉得它可能会有所帮助。

这将是您的代码

Protected Sub Menu1_MenuItemClick(sender As Object, e As System.Web.UI.WebControls.MenuEventArgs) Handles Menu1.MenuItemClick
    If e.Item.Value = "Logout" Then
        Session.Abandon()
        FormsAuthentication.SignOut()
        FormsAuthentication.RedirectToLoginPage("action=logout")
    End If
End Sub

另一个更清洁的解决方案:

  

组   LoginStatus控件的属性注销   动作到RedirectToLoginPage,登录   状态控制将自动记录   用户清除登录状态和   如果在客户端计算机上使用cookie。

......我认为第一个解决方案对您来说会更好,因为您使用的是MenuControl,需要量身定制或穿着适合的东西。但是您可以看到整个应用程序如何工作,所以你是决定的人。

来自asp.net论坛的来源文章:"Session.Abandon/LoginStatus Logout creating loop?"

答案 2 :(得分:1)

我不相信,您正面临与会话相关的问题。也可能是身份验证问题。我希望SessionAbondon()以它应该的方式工作。请注意,“会话”和“身份验证”完全不同。他们也使用不同的cookie。

为了追查问题,我建议

  • 监视(跟踪)每个请求的cookie传输(最简单的使用firefox的firebug扩展或使用ASP.NET的跟踪功能)
  • 在Session.Abandon()之前将一个唯一可识别的字符串存储到会话中并调试到后面的登录页面代码中,看看它是否仍在那里
  • 如果没有帮助,请在此处发布更多代码