2016-12-19 52 views
0

我遇到了一個問題,我使用nginx來實現負載均衡。我用的是HttpContext.Current.User.Identity.IsAuthenticated +分佈式緩存的Redis來告訴服務器的用戶登錄。HttpContext.Current.User.Identity.IsAuthenticated = false總是在Nginx環境中

public override void OnAuthorization(AuthorizationContext filterContext) 
{ 
    if (filterContext.HttpContext.User.Identity.IsAuthenticated && RedisSession.IsExistKey("Username")) 
     //HttpContext.Current.Session["Username"] == null 
    { 
     base.OnAuthorization(filterContext); 
    } 
} 

我發現Redis的緩存是好的,但httpContext.Current.User.Identity.IsAuthenticated 的地點之一是真實的。在其他網站上,它總是返回false。

例如:我使用nginx映射了兩個使用不同端口的IIS網站,當我刷新測試頁面時,它會給我不同的答案。

感謝。

+0

您是否將用戶登錄到您的應用程序中?爲了使HttpContext.User.Identity.IsAuthenticated爲true,您必須在某個時刻將用戶添加到IdentityStore。在這裏看看這是如何在Mvc中完成的例子https://www.asp.net/mvc/overview/security/create-an-aspnet-mvc-5-web-app-with-email-confirmation-和密碼重置#需要 – Alex

+0

@Alex我已經完成了它,但它只能登錄一個網站,另一個的狀態是False。 – MapleStory

回答

1

我認爲在負載平衡的環境中,您應該在兩個站點之間共享您的網站會話。

這樣,兩個IIS實例都會知道該用戶。所以你必須爲你的網站使用'進程外'緩存實現。

這是一個walkthrough使用Memcached一個這樣的解決方案。

+0

我解決了這個問題,只需在不同的Web服務器上添加Machine密鑰即可。 – MapleStory

相關問題