0

쿠키에 액세스하여 사용자 및 암호를 가져온 다음 해당보기에서 "내 정보 저장"확인란을 선택 했으므로 로그인보기의 텍스트 상자에 설정해야합니다 ".C# MVC 5 양식 인증이 해제되면 티켓 쿠키가 지워집니다

로그 오프 방법에 성공적으로 로그인 한 후 세션과 쿠키의

public ActionResult LogOff() 
{ 
    //Session.Abandon(); 
    // sign out. 
    FormsAuthentication.SignOut(); 
    return RedirectToAction("Index", "Login"); 
} 

초기화. 로그인보기 내가 먼저 로그 아웃하고 쿠키를 액세스하려고 문제가 있지만 실행하기 때문에 null을 반환의

private void InitializeSessionVariables(AgentDTO user) 
{ 
    // SessionModel.AgentId = user.ID; 
    Response.Cookies.Clear(); 
    FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1,user.MobilePhone,DateTime.Now,DateTime.Now.AddDays(30),true,"",FormsAuthentication.FormsCookiePath); 
    // Encrypt the ticket. 
    string encryptedTicket = FormsAuthentication.Encrypt(ticket); 
    // Create the cookie. 
    HttpCookie authenticationCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket); // Name of auth cookie (it's the name specified in web.config) // Hashed ticket 
    authenticationCookie.Expires = DateTime.Now.AddDays(365); 
    // Add the cookie to the list for outbound response 
    Response.Cookies.Add(authenticationCookie); 
} 

액션 결과 "FormsAuthentication.SignOut();"

public ActionResult Index(LogonDTO model, string message = null, string reason = null) 
{ 
    if (SessionModel.AgentMobilePhone != null) return RedirectToAction("Index", "Home"); 
    if (reason != null) message = "Su sessión ha expirado. Vuelva a loguearse."; 
    ViewBag.Message = message; 

    if (Request.Cookies[FormsAuthentication.FormsCookieName] != null) 
    { 
     HttpCookie authCookie = Request.Cookies[FormsAuthentication.FormsCookieName]; 
     FormsAuthenticationTicket authTicket = FormsAuthentication.Decrypt(authCookie.Value); 
     model.Username = authTicket.Name; 
     //model.Password = "in progress..." 
    } 
    return View(model); 
} 
+0

https://support.microsoft.com/en-us/help/910443/understanding-the-forms-authentication-ticket-and-cookie에서 'FormsAuthentication.SignOut();'을 누르면 제거됩니다. 어쨌든 쿠키. 영구 쿠키의 경우 FormsAuthentication.SignOut();을 호출하지 않는다고 가정합니다. – Patrick

+0

그래서, 제 경우에는 쿠키를 결코 지워야합니까? – Necroimix

+0

사용자가 여전히 티켓/쿠키를 가지고 있지만 서버에 열린 세션이없는 경우에만 FormsAuthentication.SignOut();을 사용해야한다고 생각합니다. 이렇게하면 사용자의 브라우저에서 티켓이 제거되고 다시 "로그인"됩니다. – Patrick

답변

0

그는

localStorage.setItem("UserName", "Smith"); 

과의 문서 준비 이벤트에 로그인 페이지를 설정하는 체크 박스를 저에게

사용 기억에 클릭하면 당신은 사용자 정보를 저장 자바 스크립트를 사용할 수 있습니다 Jquery 코드 아래에 쓰기

var UserName = localStorage.getItem("UserName"); 
if (UserName) $("#username").val(UserName); 

희망이 있으면 문제가 해결 될 것입니다.

+0

localstorage에서 비밀번호를 저장할 수 없습니다. – Necroimix

+0

ServerID를 사용하여 서버 측에 암호를 저장합니다. 해당 사용자에 대해 저장된 사용자 정보를 가져오고 사용자가 로그인 할 수 있도록 서버에 SessionID와 함께 요청을 보낼 수 있습니다. –

+0

세션에 보관하는 것은 좋지 않습니다. 오늘 또는 내일에 응용 프로그램을 입력 할 때 사용자 이름과 암호를 기억하십시오를 선택하면 텍스트 상자에 입력해야하므로 쿠키가 있어야합니다. 다음날 응용 프로그램을 열거 나 응용 프로그램을 닫으면 세션이 종료됩니다. – Necroimix