2011-04-20 20 views
0

我有一個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在另一個應用程序中成功實現了註銷,這似乎是菜單控件特有的問題?

+1

你在哪裏知道,會議不會被放棄?也許這是你看到的一個新的會話? – user492238 2011-04-20 17:16:11

+0

B/c當會話被放棄時,菜單不應該是可見的,但它仍然是可見的......並且如果未經過身份驗證,我仍然可以訪問上一個會話中被鎖定的所有頁面。 – davemackey 2011-04-20 17:27:21

+0

可以這樣做的一種方法是,將查詢字符串中的內容傳遞給登錄頁面應用程序。 – 2011-04-20 17:34:51

回答

1

從邏輯上講,它不可能,但似乎在會話被放棄之後,在登錄login.aspx頁面之前,您的會話將在某個地方重新開始。特別檢查您的母版頁加載。

+1

它可能開始加載login.aspx頁面。 – user492238 2011-04-20 17:18:00

+0

我想這可能是用戶 - 但我懷疑它,B/C我加載其他應用程序中的login.aspx頁面。並沒有這個問題。 – davemackey 2011-04-20 17:27:57

+0

就是這個原因,會話。只有在本屆會議上纔會舉行會議。由於登錄頁面是其他應用程序,因此會話仍然存在。 – 2011-04-20 17:33:07

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?"

1

我不相信,你所面對相關的問題會話。可能也是一個身份驗證問題。我期望SessionAbondon()以它應該的方式工作。請注意,「會話」和「身份驗證」是完全不同的事情。他們也使用不同的cookie。

爲了追查這個問題,我建議

  • 監視器(跟蹤)爲每一個請求(或最簡單的使用Firefox的擴展Firebug使用ASP.NET的跟蹤功能)您的Cookie傳遞
  • 店獨特identifyable串入會議Session.Abandon前右()和調試進入登錄頁面的代碼背後,看到的,如果它仍然存在
  • 如果沒有什麼幫助,在這裏發佈更多的代碼