У меня есть проект MVC 3, который аутентифицирует пользователей с помощью аутентификации по формам.Weird HttpContext.User.Identity issue
Чтобы получить доступ к различной информации пользователя при необходимости после проверки подлинности я реализовал простой класс:
public class ComplexUserData
{
public static string complexAccountName;
public static string complexRole;
...
...
}
На каждом запросе страницы контроллер выглядит на этот объект и заполняет данные в свойства, если это необходимо.
С другой стороны:
Процесс Логин идет как:
- LogOn страница запрашивается
- До возвращения LogOn View, контроллер проверяет, если
HttpContext.User.Identity.Name
не является нулевым - Если он не является нулевым, найдите пользователя с этим именем пользователя и перенаправите его на нужную целевую страницу
- Else возвращает страницу LogOn
И процесс выхода из системы идет как:
FormsAuthentication.SignOut();
Session.Abandon();
HttpCookie cookie1 = новый HttpCookie (FormsAuthentication.FormsCookieName, "");
cookie1.Expires = DateTime.Now.AddYears (-1); Response.Cookies.Add (cookie1);
HttpCookie cookie2 = новый HttpCookie ("ASP.NET_SessionId", "");
cookie2.Expires = DateTime.Now.AddYears (-1);
Response.Cookies.Add (cookie2);
Перенаправление на LogOn
В моей главной странице я использую SessionData.complexAccountName
в верхней панели. Все кажется прекрасным, пока пользователь не проверит.
Пользователь А говорит, что после того, как он некоторое время покидает страницу, а затем выходит из системы, сайт возвращается на главную страницу с отображением User B на верхней панели. В то же время пользователь B сделал то же самое и увидел User A на верхней панели.
Таким образом, я предполагаю, что когда пользователи выходят из системы и перенаправляются на страницу входа в систему, как показывает процесс, контроллер проверяет HttpContext.User.Identity.Name
, и хотя он должен быть нулевым, это не так! На самом деле он содержит имя другого пользователя!
Что я делаю неправильно, почему система действует странно.
Заранее благодарен.
Хорошо, я исправлю это. Но как насчет проблемы HttpContext? В 'HttpContext.User.Identity.Name' есть другое имя пользователя. –
У меня нет всего вашего кода, и я считаю, что этот процесс является недостатком в целом. Должен быть некоторый момент, когда вы назначаете значение 'HttpContext.User'. – mnemosyn