2014-01-06 1 views
0

사용자 데이터 저장에 SESSION을 사용하므로 불필요한 데이터베이스 액세스를 피할 수 있습니다. 그러나 각 액세스 컨트롤러, 데이터 FormsAuthentication은 갱신되고 데이터 세션 번호는 갱신되지 않습니다.MVC3 액세스 제어에서 세션 및 양식 인증

이 문제를 해결하는 더 좋은 방법은 무엇입니까? 위대한 세션의 삶을 바꾸거나 기본 컨트롤러를 만들거나 각각 ActionResult라고하는 세션을 만들어서 SESSION의 수명을 연장하십시오.

세부 사항, 세션 내 페이지의 헤더를 마운트하는 데 사용합니다.

이 코드는 SESSION을 만듭니다.

public static void UsuarioLogar(string login) 
{ 
    CustomMembershipUser usuario = new CustomMembershipUser(); 
    using (var dbUser = new ERPContext()) 
    { 
     var dados = (from u in dbUser.Usuario 
        where u.Login == login 
        select new 
        { 
         Nome = u.Nome, 
         UsuarioID = u.UsuarioID, 
         EmpresaID = u.EmpresaID, 
         EmpresaLogada = u.Empresa, 
         PessoaLogada = u.PessoaLogada 
        }).FirstOrDefault(); 

     if (dados != null) 
     { 
      usuario.UsuarioID = dados.UsuarioID; 
      usuario.Nome = dados.Nome; 
      usuario.EmpresaID = dados.EmpresaID; 

      usuario.EmpresaLogada = dados.EmpresaLogada; 
      usuario.PessoaLogada = dados.PessoaLogada; 

      if (usuario.PessoaLogada != null) 
       usuario.Acesso = "Restrito"; 
      else 
       usuario.Acesso = "Full"; 
      HttpContext.Current.Session["usuarioLogado"] = usuario; 
     } 
     else 
     { 
      HttpContext.Current.Session["usuario"] = null; 
      FormsAuthentication.SignOut(); 
     } 
    } 
} 
+0

나는 영어를 모국어가 아니지만 질문은 이해할 수 없습니다. 세션이 빨리 종료되거나 연장되지 않는 문제가 있습니까? – Kami

+0

제 문제는 FormsAuthentication이 SESSION이 아닌 컨트롤러에 액세스 할 때마다 갱신된다는 것입니다. 컨트롤러 세션에 대한 모든 액세스를 유지하는 가장 좋은 방법을 알고 싶습니다. –

답변

0

특히 MVC를 사용할 때 세션을 피할 것입니다. 웹과 잘 맞지 않습니다.

한 가지 대안은 IIdentity을 사용하고 Application_AuthenticateRequest 방법으로 세부 정보를 설정하는 것입니다.