0

세션이 끝나면 사용자를 다른 페이지로 리디렉션하려고합니다.세션 종료시 리디렉션하는 방법

이 코드는 "개체 참조가 개체의 인스턴스로 설정되지 않았습니다."라는 결과를 가져옵니다. 예외

void Session_End(Object sender, EventArgs E) 
{ 
    HttpContext.Current.Response.Redirect("/"); 
} 

어떻게하면 좋을까요?

+0

트리거가 발생하면 사용자 페이지와 어떤 연락도 없으므로 응답이 null입니다. 사용자가 세션을 느슨하게하지 않았는지 확인하려면 자바 스크립트 호출을 수행하십시오. 그것의 까다로운 tho, 각 통화가 세션 업데이트를 다시 트리거 할 수 있기 때문에. – Aristos

+0

당신은 HttpContext.Current가 null 참조 인 이유 인 페이지 요청과 관련이없는 이벤트에 연결하고 있습니다. 특별히 무엇을 원하니? 로그 아웃 기능을 구현 하시겠습니까, 아니면 사용자가 세션 밖에있을 때 감지 할 수 있습니까? 그것들은 서로 다른 답변을 가진 각각 다른 상황이고, 각각은 위의 코드와 다릅니다. –

+0

http://stackoverflow.com/questions/4453365/session-end-in-global-asax-cs-not-firing-using-forms-authentication ... 포럼을 확인하십시오. –

답변

1

Session_End은 내부 타이머를 기반으로 서버에 의해 내부적으로 실행됩니다. 따라서 그 일이 발생하면 HttpRequest이 연결되지 않습니다. 따라서 Response.Redirect 또는 Server.Transfer은 의미가 없으며 작동하지 않습니다.

나는 이것에 대한 과거의 해결 방법을 보았지만 한 번도 시도하지는 않았지만 모든 페이지가 상속하는 Base 클래스를 만들어야합니다. 기본 클래스의 OnInit이이를 추가합니다. 기본 클래스는 UI.Page을 상속합니다. 기본 클래스 로직을 사용하지 않는다면 좋지 않은 모든 페이지에이 로직을 추가해야합니다. 세션이 만료되면 사용자가 세션이 새로운 것을 잡을 경우

protected override void OnInit(System.EventArgs e) 
    { 
     Response.AddHeader("Refresh",Convert.ToString((Session.Timeout * 60) + 5));  

     if(Session.IsNewSession) 
      Response.Redirect(“Logout.aspx”);// or another page which you want. 
    } 

페이지은 함께 5 초 후에 갱신해야하며, 당신은 리디렉션합니다.

관련 문제