2016-09-13 2 views
0

웹 사이트에 로그인/로그 아웃 기능을 구현 중입니다. 사용자가 Sign out 버튼 (어디 있지만, 로그인 페이지, Login.aspx에) 클릭 할 때마다 다음과 같은 방법을 실행합니다 :Response.Redirect 다음에 세션 시간 초과를 감지합니까?

protected void SignOut(object sender, EventArgs e) 
{ 
    Session.Abandon(); 
    Response.Redirect("Login.aspx"); 
} 

을 이제 리디렉션이 발생했을 때, 나는 Login.aspx에서 다음을 수행 할 :

protected void Page_Init(object sender, EventArgs e) 
{ 
    if (Session_has_timed_out ...) 
     SessionTimeOutDIV.Text = "Session timed out. Please log in again."; 
    else 
    { 
     // normal logic here ... 
    } 
} 

Q : 어떻게 세션이 이전에 나는이 (1) Session.Abandon()의 실제 호출 후 (2)이 Session.Abandon()에 대한 호출이 있었다 곳에서 리디렉션하고 이후에 확인해야 주어진, 종료 된 것을 확인 할 일어난?

+0

'Session.Abandon()'은'session_end' 이벤트를 발생시킵니다. 거기에 뭔가를 설정할 수 있습니다. 또한 포기한 이벤트 후에는 모든 세션 변수가 null이되어 확인할 수 있습니다. 그것은 당신이 찾고있는 것입니까? –

+0

@Ravi A. 올바르게 이해하면,'Session.Abandon()'은 모든 세션 변수를 파괴 할 것입니다. 따라서 기술적으로 전화 통화와 '세션 [ '이름']'** 이전 ** 세션이도 만들어지고 ** 후 ** 포기되어있다 - 두 경우 모두에서 우리는'null'를 얻을. 이것이 문제입니다. 왜냐하면'Page_Init'에서'Session [ 'username']'을 체크하면 페이지가 시작될 때마다 조건이 'true'로 해석 될 것이기 때문입니다. 세션이 ** 종료 ** 될 때마다 (즉, 사용자가 로그 아웃했을 때) 사실 만 필요합니다. – Alex

답변

1

그렇기 때문에 인증을 위해 쿠키를 사용하고 formsAuth 또는 지금 ASP.Net ID를 사용하는 것이 좋습니다. 그것이 MVC라면 우리는 TempData를 가지고 있지만, webforms를 위해서 그런 것들은 없다고 생각합니다. 당신이 Login.aspx

if (Request.QueryString["LogOut"] != null && Request.QueryString["LogOut"] == "true") //do handle exception and casting 
    { 
     //SessionTimeOutDIV.Text = "Session timed out. Please log in again."; 
    } 
    else 
    { 
     // normal logic here ... 
    } 

의 후 Page_Init에서 쿼리 문자열처럼

Response.Redirect("Login.aspx?Logout=true"); 

를 다른 상태 관리 기술을 사용할 수 있도록이 내용은 해킹이 도움이되기를 바랍니다.

+0

그건 아주 똑똑한 접근법입니다. 어떻게 내게 새벽이되지 않았는지 궁금합니다! 감사! – Alex

관련 문제