2012-07-10 4 views
0

,세션 만료 및 인증 쿠키는 내 세션이 만료되는 문제에 봉착

Session["UserId"] = userId; 

남아 있지만, 인증 쿠키가 [인증] 속성은 여전히 ​​사용자가 시스템을 탐색 할 수 있도록되도록 아직 거기 시스템이 세션 변수와 오류를 읽으려고 시도 할 때까지 Null 예외

세션이 만료 될 때 인증 쿠키를 삭제하는 방법에 대한 생각이 있습니까? 나는 ASP.NET MVC 3를 처음 접했을 때 어떤 통찰력이라도 고맙게 생각합니다.

답변

0

이렇게하는 방법에는 여러 가지가 있습니다. 여기 하나의 아이디어가 있습니다.

public class ControllerBase : Controller 
{ 
    public ControllerBase() 
     : base() 
    { 
     this.VerifySession(); 
    } 

    /// <summary> 
    /// Indicates whether the session must be active and contain a valid customer. 
    /// </summary> 
    protected virtual bool RequiresActiveSession 
    { 
     get { return true; } 
    } 

    public void VerifySession() 
    { 
     if (this.RequiresActiveSession && Session["UserId"] == null) 
     { 
      Response.Redirect(Url.Action("LoginPage")); 
     } 
    } 

} 

public class HomeController : ControllerBase 
{ 
    protected override bool RequiresActiveSession 
    { 
     get 
     { 
      return true; 
     } 
    } 

    public ActionResult Index() 
    { 
     return View(); 
    } 
} 

기본적으로 세션 유효성 검사를 처리 할 컨트롤러 기반이 있습니다. 그리고 그것으로부터 상속 한 컨트롤러는 세션의 유효성을 검사할지 여부를 지정할 수 있습니다.

또는

당신이 당신의 컨트롤러 작업을 실행하기 전에 컨트롤러 또는 행동 특성 및 처리 파이프 라인에 코드를 후크 할 수있는 사용자 정의 Action Filter를 만들 수 있습니다.

+1

기본 클래스를 사용하지 않는 것이 좋습니다. 매우 지저분하며, 기본 클래스를 사용하는 것이 좋습니다. 그렇지 않으면 웹 API 예를 들어 – Onkelborg

+1

나는베이스 컨트롤러에서 파생되는 대신 작업 필터의 사용을 선호합니다. 인증 조치 필터의 예제는 다음을 참조하십시오. http://stackoverflow.com/questions/996387/asp-net-mvc-iauthorizationfilter-attribute-prefered-security-check-for-login – Arjen

+0

감사합니다 !! 커스텀 액션 필터는 갈 길처럼 들립니다! 고위 개발자는 대부분의 사람들이 하이재킹의 경우 세션 변수를 사용하는 것과 동일한 방식으로 쿠키에 사용자 데이터를 저장하는 것을 방지합니다. – user1345632

2

이것은 나쁜 습관입니다. 자세한 설명은 this link을 참조하십시오. 기본적으로 누군가로 로그인 한 다음 다른 사람의 세션 키를 확보하면 해당 ID를 훔칠 수 있습니다.

대신 사용자의 ID를 인증 쿠키에 포함 시키십시오 (해당 주제의 this question 참조). 그런 다음 원하는 경우에만 세션을 캐시로 사용할 수 있습니다. 세션 ID를 인증 쿠키에 저장된 ID와 비교하십시오. 예를 들어, global.asax에서 수행하여 응용 프로그램을 변경할 필요가 없습니다.