이전에 asp.net 회원 API를 사용했다고 생각합니다. 이제 응용 프로그램에 사용자 지정 사용자 지정을 만들려고합니다.
서버에 요청을 보내면 서버는 새로운 깨끗한 HttpContext를 사용합니다. 그래서 당신은 옛 정보를 잃어 버렸습니다. 이전 세션 정보를 응용 프로그램으로 사용하려면 서버 또는 클라이언트 측에 데이터를 저장해야합니다. 이것을 두 가지 방법으로 할 수 있습니다.
난 당신이 클라이언트 쿠키를 사용하는 운영자 추천. 데이터가 클라이언트 측에 저장되므로 서버 리소스가 절약됩니다.
public void SetCredentials(HttpContextBase context, string username, bool createPersistenceCookie)
{
var formsAuthenticationTicket = new FormsAuthenticationTicket(
1,
username,
DateTime.Now,
DateTime.Now.AddMilliseconds(FormsAuthentication.Timeout.TotalMilliseconds),
createPersistenceCookie,
roles
);
var encryptedTicket = FormsAuthentication.Encrypt(formsAuthenticationTicket);
var authCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket);
HttpContext.Current.Response.AppendCookie(authCookie);
}
클라이언트 측에 암호화 된 쿠키를 보냈습니다. 그리고이 쿠키를 서버 응용 프로그램에 들어오는 요청을 모두 확인해야합니다.
그리고 지금 Global.asax에 파일
:
protected void Application_AuthenticateRequest(object sender, System.EventArgs e)
{
HttpCookie authCookie = Request.Cookies[FormsAuthentication.FormsCookieName];
if (authCookie == null) return;
FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(authCookie.Value);
IIdentity identity = new GenericIdentity(ticket.Name);
IPrincipal principal = new GenericPrincipal(identity, ticket.UserData.Split('|'));
HttpContext.Current.User = principal;
}
나는 당신의 문제를 해결할 수 있기를 바랍니다.
컨텍스트 사용자가 CurrentPrincipal과 동일합니까? – Prescott
'Thread.CurrentPrincipal.IsInRole ("standart")'가 true를 반환한다는 사실은 게시물의 제목과 모순됩니다. Thread.CurrentPrincipal과 context.User가 모두 'principal'과 동일한 인스턴스인지 여부를 알려줄 것을 권한다. – chiccodoro