我是一名新的开发人员,我被分配了一项任务,要弄清楚为什么我们的注销功能不起作用。我已经尝试了我能找到的所有可能的方法。下面是我保存的日志,其中包括我使用的方法。
-
在CommonHeader.ascx表单中添加了一个注销按钮
-
在logout.aspx.vb表单中尝试了许多方法来结束或清除会话,但都不起作用。
a。在logout.aspx.vb表单中定义的ClearSession子例程:
Session("Variable") = ""
FormsAuthentication.SignOut()
Session.RemoveAll()
Session.Abandon()
Session.Clear()
b。还将其添加到Page_Load子程序的顶部:
HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.NoCache)
HttpContext.Current.Response.Cache.SetNoServerCaching()
HttpContext.Current.Response.Cache.SetNoStore()
c。还将ClearSession子程序从Session("Variable") = ""
更改为Session.Contents.Remove("Variable")
这些方法都不起作用。我们使用Siteminder,我一直在想这是否是问题的根源。我只是找不到任何关于清除使用Siteminder的会话的信息。还要记住,此应用程序是用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
最终找到了解决方案,我最初没有在删除包含siteminder会话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")
这个问题:表单身份验证注销不会将用户注销描述了即使在调用表单身份验证后也无法清除cookie的问题。SignOut()。这听起来像是你的问题,他们说这是一个bug。NET,并且作为您使用1.1,这听起来显然是可能的。
HI朋友请在用户控件中添加按钮的点击事件。在点击事件中,请添加以下代码并删除所有其他代码。
会话("Variable")=";
看看这篇文章
C#清除会话
无论是c sharp还是vb,同样的规则仍然适用。您正在呼叫会话放弃然后清除,但当您呼叫清除时,会话应该已经结束。
Clear保留会话状态以及其中的对象,因此通过在放弃后调用它,实际上可以为用户重新初始化会话,但要清除变量。
如果你有一个,请参阅这篇文章,了解终止会话并重定向到登录页面的顺序和正确方法
表单身份验证。SignOut()不会将用户注销
首先要注意的是,如果您使用Forms Authentication,Session与用户是否登录完全无关。
正在调用FormsAuthentication。如果CookiesSupported为false,SignOut将从cookie或URL中删除表单身份验证票证信息。
但它不会影响Session中存储的内容。
更新
为什么您认为注销(FormsAuthentication.SignOut)不起作用?当你点击"注销"时,你预计会发生什么,实际发生了什么?
我会去掉所有的代码来清除Session并查看它。例如,使用Fiddler等工具查看http流量:当您单击"注销"时,您应该能够看到FormsAUthentication cookie被删除。