Несколько недель назад у нас был один из наших клиентов, связавшийся с нами, говоря, что иногда, когда он создает свою деятельность, он создается под другим именем!
Мы устранили некоторые проблемы и не смогли найти ничего. Мы попросили пользователя связаться с нами в следующий раз, когда он столкнулся с этими проблемами. Он связался с нами, и мы смогли с ним поработать и посмотреть на проблему своими глазами.
Это были не только действия, он был признан кем-то другим в заявке. Он имел доступ ко всему, к чему имел доступ другой человек. Это было тогда, когда мы поняли, что у нас проблема со смешанной сессией.
Немного о нашем коде:
Как и в любом другом приложении, у нас есть простая страница входа, в которую пользователь вводит адрес электронной почты и пароль, и мы аутентифицируем их по нашей базе данных, и если они действительны, мы вызываем FormsAuthentication.SetAuthCookie(), чтобы сохранить текущий идентификатор пользователя в файле cookie, и мы его впустили.
BL.User currentUser = BL.User.Authenticate(txtUsername.Text, txtPassword.Text);
if (currentUser != null)
{
this.Session["NumberOfLoginTried"] = "0";
FormsAuthentication.SetAuthCookie(currentUser.UserID.ToString(), chRememberMe.Checked);
Response.Redirect(FormsAuthentication.GetRedirectUrl(currentUser.UserID.ToString(), false));
}
Мы также используем следующий фрагмент кода для ввода идентификатора пользователя (текущего пользователя) в нашем приложении.
public static int GetCurrentUserID()
{
int userID = -1;
int.TryParse(HttpContext.Current.User.Identity.Name, out userID);
return userID;
}
И да, мы сделали домашнее задание и googled вокруг и увидели следующие две ссылки:
http://lionsden.co.il/codeden/?p=446
Соединение ASP.NET с использованием StateServer (SCARY!)
Мы отключили кеширование в режиме ядра и кэширование пользовательского режима для файлов .aspx и .ascx, и это все еще происходит.
P.S- Приложение работает под управлением Windows 2008 R2 с IIS 7.5. И мы НЕ, используя cookieless session.