2016-12-19 5 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.

Например: я сопоставил два веб-сайта IIS с использованием другого порта, используя nginx, когда обновляю тестовую страницу, это даст мне другой ответ.

Спасибо.

+0

Вы вошли в систему в своем приложении? Для того чтобы HttpContext.User.Identity.IsAuthenticated был прав, вы должны добавить пользователя в IdentityStore в какой-то момент. Посмотрите здесь пример того, как это делается в Mvc https://www.asp.net/mvc/overview/security/create-an-aspnet-mvc-5-web-app-with-email-confirmation- and-password-reset # require – Alex

+0

@Alex Я сделал это, но он может войти только на один сайт, а в другом - False. – MapleStory

ответ

1

Я думаю, что в условиях сбалансированной нагрузки вы должны делиться своим сайтом Сессией на обоих сайтах.

Таким образом, оба экземпляра IIS будут знать о пользователе. Таким образом, для ваших веб-сайтов вам нужно использовать реализацию кэша вне процесса.

Это walkthrough одного такого решения с использованием Memcached.

+0

Я решил проблему, просто добавьте ключ машины на другой веб-сервер. – MapleStory

 Смежные вопросы

  • Нет связанных вопросов^_^