Старайтесь не использовать сессию как можно дольше, если вы можете уйти без всяких забот, это значительно облегчает развертывание на нескольких серверах. Вероятно, имя и адрес электронной почты являются легкими кандидатами на использование файлов cookie. Подделать файл cookie легко, поэтому в зависимости от ваших потребностей в области безопасности идентификатор пользователя может оказаться не очень хорошим решением.
Файлы cookie для проверки подлинности форм зашифрованы, и вы можете добавить дополнительные данные в эти файлы cookie (подробности см. Ниже). Это возможно взломать, но не так просто, как простое печенье.
Вот код, который я использовал в прошлом, слегка модифицированный, чтобы удалить некоторые детали проекта. Вызовите это в событии LoggedIn элемента управления входом.
void AddUserIDToAuthCookie(string userID)
{
//There is no way to directly set the userdata portion of a FormAuthenticationTicket
//without re-writing the login portion of the Login control
//
//I find it easier to pull the cookie that the Login control inserted out
//and create a new cookie with the userdata set
HttpCookie authCookie = Response.Cookies[AUTH_COOKIE];
if(authCookie == null)
{
return;
}
Response.Cookies.Remove(AUTH_COOKIE);
FormsAuthenticationTicket oldTicket = FormsAuthentication.Decrypt(authCookie.Value);
var newTicket =
new FormsAuthenticationTicket(oldTicket.Version, oldTicket.Name, oldTicket.IssueDate, oldTicket.Expiration,
oldTicket.IsPersistent, userID, oldTicket.CookiePath);
authCookie.Value = FormsAuthentication.Encrypt(newTicket);
Response.Cookies.Add(authCookie);
}
К вашему сведению, я скопировал это из старого проекта и отредактировал здесь, чтобы удалить некоторые специфичные для проекта биты, поэтому он может не скомпилироваться, но это будет очень близко.
Чтобы получить идентификатор на своей веб-странице ...
FormsAuthenticationTicket ticket = ((FormsIdentity) Page.User.Identity).Ticket;
string id = ticket.UserData;
Я использовал этот механизм для хранения идентификатора, который не был частью пользовательских данных aspnetdb. Если все ваши идентификационные данные обрабатываются aspnetdb, вам может потребоваться только доступ к объекту Page.User.Identity.