我有一个菜单控件,我已经添加了一个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
当我退出时,重定向很好,但它似乎没有放弃会话。我已经使用LinkButton在另一个应用程序中成功实现了注销,这似乎是一个专门用于Menu控件的问题?
答案 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。
为了追查问题,我建议