7

我是一名新开发人员,我被分配了找出为什么我们的注销功能不起作用的任务。我已经尝试了我能找到的所有可能的方法。下面是我保留的日志,其中包括我使用过的方法。

  1. 在 CommonHeader.ascx 表单中添加了一个注销按钮

  2. 在 logout.aspx.vb 表单中尝试了许多方法来让它结束或清除会话,但它们都不起作用。

一个。以 logout.aspx.vb 形式定义的 ClearSession 子例程:

Session("Variable") = ""
FormsAuthentication.SignOut()
Session.RemoveAll()
Session.Abandon()
Session.Clear()

湾。还将它添加到 Page_Load 子例程的顶部:

HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.NoCache)
HttpContext.Current.Response.Cache.SetNoServerCaching()
HttpContext.Current.Response.Cache.SetNoStore()

C。还将 ClearSession 子例程更改为Session.Contents.Remove("Variable")fromSession("Variable") = ""

这些方法都不起作用。我们使用Siteminder,我一直想知道这是否是问题的根源。我只是在清除使用Siteminder的 Session 时找不到任何东西。另请记住,此应用程序是使用 Visual Studio 2003 编码的。

这是我在 ascx 文件中使用的按钮的代码:

athp:TopNavText Title="注销" NavigateUrl="logout.aspx" Target="_top"/

然后在“logout.aspx”表单上,我尝试使用上述方法之一或每种方法的组合。这是我接触之前的代码:

Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load  

     ClearSession() 
     Response.Redirect("login.aspx") 

End Sub 

Public Sub ClearSession() 

     Session("Variable") = "" 

End Sub
4

5 回答 5

2

终于找到了解决方案,我最初没有在删除包含站点管理器会话ID的cookie时定义域。我使用的代码如下:

        Dim cookie3 As HttpCookie = New HttpCookie("SMSESSION", "NO")
        cookie3.Expires = DateTime.Now.AddYears(-1)
        cookie3.Domain = ".domain.com"
        Response.Cookies.Add(cookie3)

        Response.Redirect("login.aspx")
于 2012-10-18T04:25:42.343 回答
0

这个问题:formsauthentication-signout-does-not-log-the-user-out描述了即使在调用 FormsAuthentication.SignOut() 之后也没有清除 cookie 的问题。这听起来像您的问题,他们说这是.NET 的一个错误,并且您使用 1.1 这听起来很可能。

于 2012-10-12T16:00:01.687 回答
0

HI 朋友请在用户控件中添加按钮的点击事件。在点击事件中,请添加以下代码并删除所有其他代码。

会话(“变量”)=“”;

于 2012-10-12T18:00:07.353 回答
0

看看这个帖子

C# 清除会话

无论是升c还是vb,同样的规则仍然适用。您正在调用会话放弃然后清除,但是当您调用清除时,会话应该已经消失了。

Clear 将会话状态与其中的对象一起保存,因此通过在放弃后调用它,实际上可以为用户重新初始化会话,但变量已被清除。

请参阅此帖子以了解终止会话并重定向到登录页面的顺序和正确方法(如果您有一个)

FormsAuthentication.SignOut() 不会将用户注销

于 2012-10-12T18:23:35.937 回答
0

首先要注意的是,如果您使用的是表单身份验证,则 Session 与用户是否登录完全无关。

如果 CookiesSupported 为 false,则调用FormsAuthentication.SignOut将从 cookie 或 URL 中删除表单身份验证票信息。

但它不会影响 Session 中存储的内容。

更新

为什么您认为注销 (FormsAuthentication.SignOut) 不起作用?当您单击“退出”时,您期望发生什么,实际发生了什么?

我会去掉所有代码来清除 Session 并看看这个。例如,使用Fiddler等工具查看 http 流量:您应该能够看到当您单击 Log Out 时 FormsAUthentication cookie 已被删除。

于 2012-10-12T19:07:45.890 回答