로그인 페이지에서 FormsAuthenticationTicket
은 일부 사용자 정의 사용자 데이터가있는 영구 쿠키로 설정됩니다. 이제이 사용자 지정 사용자 데이터를 변경해야하므로 매개 변수가 하나 더 있습니다. 이전에 로그인 한 사용자가 다음 번에 사이트를 방문하면이 사용자 정의 사용자 데이터를 Application_PostAuthenticateRequest
에 deserialize하지만 이제는 새로 추가 된 매개 변수가 포함되지 않습니다.FormsAuthenticationTicket UserData 갱신
사용자가 다시 로그인해야하는 번거 로움없이이 매개 변수를 검색 할 수 있습니까?
그렇다면 영구 쿠키에 '업데이트'해야한다는 것을 어떻게 알 수 있습니까?
쿠키 세트. userId는 새로운 매개 변수입니다.
CustomPrincipalSerializeModel serializeModel = new CustomPrincipalSerializeModel();
serializeModel.FirstName = model.UserName;
serializeModel.userId = model.userId;
JavaScriptSerializer serializer = new JavaScriptSerializer();
string userData = serializer.Serialize(serializeModel);
FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket(
1,
model.UserName,
DateTime.Now,
DateTime.Now.AddYears(5),
model.RememberMe,
userData);
string encTicket = FormsAuthentication.Encrypt(authTicket);
HttpCookie faCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encTicket);
faCookie.Expires = authTicket.Expiration;
Response.Cookies.Add(faCookie);
return RedirectToAction("Index", "Home");
쿠키 검색입니다. 사용자 ID는 새로운 있었던 파라미터이며, 사용자 로그인 이전에 null
입니다 :
HttpCookie authCookie = Request.Cookies[FormsAuthentication.FormsCookieName];
if (authCookie != null)
{
FormsAuthenticationTicket authTicket = FormsAuthentication.Decrypt(authCookie.Value);
JavaScriptSerializer serializer = new JavaScriptSerializer();
CustomPrincipalSerializeModel serializeModel = serializer.Deserialize<CustomPrincipalSerializeModel>(authTicket.UserData);
CustomPrincipal newUser = new CustomPrincipal(authTicket.Name);
newUser.FirstName = serializeModel.FirstName;
newUser.userId = serializeModel.userId;
HttpContext.Current.User = newUser;
}
MVC입니다. 올바른 맞춤 교장을 얻지 만 쿠키에 저장된 일부 데이터를 비 직렬화하기 때문에 새로 추가 된 유형이 직렬화에 설정되지 않습니다 ... 그래서 사용자가 다시 로그인해야합니다. 최신 정보. – perene
암호화하기 전에 새 UserId가 설정되었고 UserData에서 적절하게 직렬화되었는지 확인했습니다. –
... UserId가 설정되지 않았습니다 - 그게 전부 문제입니다. 쿠키를 설정하려면 사용자가 로그 아웃하고 다시 로그인하여 새 쿠키를 만들어야하며,이 작업을 수행하지 않는 방법을 찾고 있습니다. – perene