2012-10-12 144 views
7

我是一名新開發人員,並且我已分配了確定註銷功能不起作用的任務。我嘗試了所有可能的方法,我可以找到。下面是我保存的日誌,其中包括我使用的方法。在ASP.NET中清除會話

  1. 增加了註銷按鈕到CommonHeader.ascx形式

  2. 試過在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標題=「註銷」 NavigateUrl =「註銷.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 
+0

您是否通過調試確認您的ClearSession子例程被調用? (特別是當你有Session.Abandon()時) –

+0

如果你使用的是VS2003,那麼你使用的是.NET 1.1。 –

+0

是的,它肯定會碰到子程序。我在代碼中添加標記以驗證它在到達ClearSession子例程之前沒有停止。它只是在頁面加載時調用,然後它應該重定向到登錄頁面,但是當我有Response.Redirect(「login.aspx」)未加引號時,它仍然將我重定向回主頁,並且仍然登錄。 – gbills

回答

2

終於搞清楚瞭解決方案,我原來沒有在刪除包含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") 
0

這個問題:formsauthentication-signout-does-not-log-the-user-out描述甚至稱FormsAuthentication.SignOut後不清除Cookie問題()。這聽起來像是你的問題,他們說這是一個.NET錯誤,當你使用1.1這聽起來明顯可能。

+0

使用該示例給我這個錯誤: 編譯器錯誤消息:BC30108:'HttpCookie'是一種類型,不能用作表達式。第36行:HttpCookie cookie1 =新的HttpCookie(FormsAuthentication.FormsCookieName,「」) – gbills

+0

好吧我修復了那個編譯器錯誤,但它仍然無法使用該示例。 – gbills

0

嗨,朋友請在用戶控制中添加按鈕的點擊事件。在點擊事件中,請添加以下代碼並刪除所有其他代碼。

Session(「Variable」)=「」;

+0

@denas我在我的問題上面發佈了上面的代碼 – gbills

0

看看這個帖子

C# Clear Session

無論是其升C或VB相同的規則仍然適用。您正在呼叫會議放棄,然後清除,但是在您呼叫清除時,會話應該消失。

Clear保持會話狀態以及其中的對象,所以通過在放棄之後調用它,實際上可以爲用戶重新初始化會話,但會清除變量。

看到這個職位的順序,正確的方式來殺死會話,然後重定向到,如果你有一個

FormsAuthentication.SignOut() does not log the user out

0

首先要注意登錄頁面是,如果你使用表單身份驗證,會話與用戶是否登錄完全無關。

調用FormsAuthentication.SignOut將從Cookie或URL中移除表單身份驗證票證信息(如果CookiesSupported爲false)。

但它對Session中存儲的內容沒有影響。

UPDATE

爲什麼你認爲註銷(FormsAuthentication.SignOut)不工作?當您點擊退出時,您希望發生什麼?實際發生了什麼?

我會擺脫所有的代碼來清除會話,看看這個。例如,使用諸如Fiddler之類的工具查看http流量:當單擊註銷時,您應該能夠看到FormsAUthentication cookie已被刪除。

+0

謝謝你澄清。我只是認爲我會嘗試它,因爲在這一點上,我只是想讓它發揮作用。我們正在使用名爲System.Web.SessionState的命名空間,我假設它能夠使用上面我嘗試過的一些方法。 – gbills

+0

當我點擊註銷時,我試圖讓它重定向到我的登錄頁面。相反,它只是將我重定向回主頁面。我已經嘗試了上面列出的每種方法,並根據Fiddler爲每個方法使用相同的cookie。我相信這與Siteminder有關,但我無法弄清楚如何殺死Siteminder會話 – gbills

+0

@GarrettBills,它幾乎肯定與SiteMinder有關。我對SiteMinder並不熟悉,所以我已經爲您的問題添加了SiteMinder標籤,希望有人能夠看到它。我假設您需要過期SiteMinder使用的任何cookie(通常通過將其到期日期設置爲過去的日期) - 您應該能夠使用Fiddler查看cookie。 – Joe