在我們的應用程序中,我們需要用戶「冒充」不同的用戶。把它看成是一個層次結構 - 鮑勃在層次結構中高於弗蘭克。 Bob已登錄,他需要在系統中短時間內處理Frank的內容。因此,我們向Bob提供了向他彙報的用戶列表以及模擬鏈接。他點擊這個鏈接,在幕後,我將Bob註銷,並以弗蘭克登錄。我還設置了一個會話變量,告訴我真的Bob是誰,是誰的用戶。另外,鮑勃(現在扮演弗蘭克)在每頁頂部都有一個很好的小鏈接,上面寫着「停止模仿」。另外,當鮑勃扮演弗蘭克時,鮑勃被限制做某些事情,比如改變弗蘭克的密碼。ASP.Net會員服務
這很好,直到我們遇到了一個情況,如果會話(我認爲 - 在這裏變得困惑)被破壞(比如當我將新代碼和dll複製到活動站點時),那麼當Bob點擊「停止模擬」他被重定向到默認頁面,並且仍然以Frank身份登錄,但沒有模擬會話變量。所以,現在Bob真的以Frank身份登錄,並且可以更改Frank的密碼(等等)。
是什麼讓一個會話變量(模擬)被摧毀,但我猜會話還在閒逛,因爲它不會使用戶再次登錄?
這是我們的系統是如何工作的有些嚴重的錯誤(在我們的代碼錯誤,我敢肯定,沒有.NET)。有沒有人對此有任何解決方案的建議?
我們正在使用ASP.Net C#,ASPNET會員服務,.NET 3.5,窗體身份驗證...不知道你需要知道什麼。
編輯:更新的信息。看起來像什麼時候發生了「某些事情」,例如,當我重新編譯一些dll並將它們複製到網絡服務器時,會話被轉儲。或者,相反,會話中的變量會被拋棄。會話ID保持不變。我確實需要檢查Session.IsNewSession,它會返回true,即使id與以前相同。
就像Utaal提到的,Membership Services與Session是分開的,所以它的表單auth token仍然在瀏覽器中,但是我的session變量告訴我這不是真正控制瀏覽器的用戶isn'再也不存在了。
編輯:天空,這裏是我正在做什麼來驗證用戶。我想不通,我會插入一張票到這個流程:
if (Membership.ValidateUser(txtUserName.Text, txtPassword.Text))
FormsAuthentication.SetAuthCookie(txtUserName.Text, false);
所以,我在哪裏可以滑在票據對象,並設置自己的信息?
@matt,已更新。一旦你將頭部纏繞在身上,它確實是一塊蛋糕。瑣碎甚至... – 2010-02-23 05:11:20