2013-10-04 67 views
0

通過我在ASP.Net開發相當新的,我已經搜查高和低的分辨率來此,都無濟於事。我使用Forms身份驗證來驗證用戶,當用戶A登錄時,我放棄當前會話,生成一個新的會話cookie/id並重定向到我的內容頁面,並且所有內容都按計劃運行。但是,當我打開一個新的瀏覽器窗口並導航到登錄屏幕,從而啓動一個新會話時,用戶A的身份驗證Cookie將自動傳遞到此會話,並且是請求Cookie集合的一部分。更糟的是,當我真正爲用戶B登錄,然後得到一個新的身份驗證cookie刷新會話中的瀏覽器窗口,它現在有用戶B的身份驗證cookieASP.Net窗體身份驗證cookie跨會話

我不知道爲什麼會這樣。我認爲瀏覽器(IE9)緩存了身份驗證cookie,因爲即使我在代碼隱藏中專門設置了Response.Cache.SetCacheability(「no-cache」),響應頭集合也被設置爲緩存控制「private」爲所有頁面。然後我想這可能是一個線程問題。

任何深入瞭解爲什麼發生這種情況是極大的讚賞,感謝。

+1

添加一些代碼。你如何「放棄當前會議」? – Zerkey

+0

@Zerkey驗證用戶的憑證後,我創建一個驗證票據/ cookie,然後發出Session.Abandon()。接下來,我Response.Cookies.Add(新HttpCookie(「sessionID」,「」)),以清除cookie。然後,我使用會話管理器生成一個新的會話ID和cookie,即SessionManager.SaveSessionID(Context,NewSessionID,重定向,IsAdded)。這工作得很好,當用戶登錄時,他被重定向到我的內容頁面,並帶有一個新的會話ID – user2845011

回答

1

嘗試像Chrome和IE之類的不同瀏覽器。由於瀏覽器共享相同的cookie和臨時文件,甚至在新窗口中打開。如果您嘗試使用gmail.com或live.com,則會發生上述情況。

+0

使用gmail.com測試場景後,您完全正確。最新的用戶身份驗證Cookie將替換舊用戶,從而將舊用戶記錄下來。我如何防止這種情況?最終,我想達到一點,如果用戶從2個不同的窗口/會話登錄,則較舊的會話失效。我知道我需要做的是這樣如果Request.IsAuthenticated AndAlso不System.Web.HttpContext.Current.Cache(User.Identity.Name)= System.Web.HttpContext.Current.Session.SessionID然後Session.Abandon但用戶在登錄之前進行身份驗證。 – user2845011