Джеф,
Как я уже сказал в комментарии к вашему вопросу выше, вы должны использовать ClaimedIdentifier для имени пользователя, то есть первый параметр SetAuthCookie. Для этого есть огромная причина безопасности. Не стесняйтесь начинать обсуждение по адресу dotnetopenid@googlegroups.com, если вы хотите больше узнать о причинах.
Теперь по поводу вашего вопроса обо всем объекте пользователя ... если вы хотите отправить его в виде куки-файла, вам нужно будет сериализовать ваш объект пользователя в виде строки, тогда вы ДОЛЖНЫ ПОДПИСАТЬ его каким-либо образом. для защиты от вмешательства пользователя. Вы также можете зашифровать его. Бла-бла, это большая работа, и вы получите большой файл cookie, который отправляется туда-сюда с каждым веб-запросом, который вам не нужен.
Что я делаю в своих приложениях, чтобы решить проблему, о которой вы говорите, - добавить статическое свойство в мой файл Global.asax.cs с именем CurrentUser. Как это:
public static User CurrentUser {
get {
User user = HttpContext.Current.Items["CurrentUser"] as User;
if (user == null && HttpContext.Current.User.Identity.IsAuthenticated) {
user = Database.LookupUserByClaimedIdentifier(HttpContext.Current.User.Identity.Name);
HttpContext.Current.Items["CurrentUser"] = user;
}
return user;
}
}
Обратите внимание, что я кеширую результат в словаре HttpContext.Current.Items, который относится к одному HTTP-запросу, и удерживает выборку пользователя до одного нажатия - и извлекает его только в первый раз, если страница действительно хочет информация CurrentUser.
Таким образом, страница может легко получить текущую информацию о пользователях, таких как:
User user = Global.CurrentUser;
if (user != null) { // unnecessary check if this is a page that users must be authenticated to access
int age = user.Age; // whatever you need here
}