在自定義ActionFilterAttribute的OnActionExecuting方法期間,我們確保用戶在執行某些操作之前仍然登錄。MVC的ActionExecutingContext HttpContext.User.Identity.IsAuthenticated在多個瀏覽器選項卡上登錄時返回False
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if (filterContext.HttpContext.User.Identity.IsAuthenticated)
{
// Do something...
}
}
我有與唯一的區別是虛擬目錄名相同的域名下運行多個客戶端的多個站點:我們做類似這樣的僞代碼的東西做到這一點。每個虛擬目錄實際上指向相同的文件夾/代碼庫,並且URL/virdir名稱指示代碼在嵌套/客戶端目錄中使用哪個「客戶端配置文件」。不知道是否需要站點/代碼/ IIS配置中的詳細信息,但是如果出現任何問題,則提供該問題的罪魁禍首。
如果我嘗試使用瀏覽器的多個實例登錄多個網站,則一切正常。當我嘗試瀏覽網站時,IsAuthenticated檢查返回true。
但是,如果我嘗試使用單個瀏覽器登錄多個網站並使用多個選項卡,我總是來回登出。如果我登錄到網站A,則可以瀏覽,但只要登錄到網站B,如果我嘗試在網站A中的任何位置導航,則IsAuthenticated返回false。
這是預期的行爲?有沒有解決這個問題的方法?
更新:我現在只能夠在IE中重現此行爲。在Firefox和Chrome中,無論我使用的是同一個瀏覽器/多個標籤頁還是多個瀏覽器,我都可以啓動登錄屏幕。 IE處理Cookie的方式有什麼不同?或者不是餅乾的罪魁禍首?