2010-05-17 3 views
3

웹 사이트를 프로그래밍하고, 로그인 도구가 아닌 텍스트 상자를 통해 로그인 메커니즘을 준비했으며, 사용자는 로그 아웃하려고하며 로그 아웃 버튼을 클릭합니다. 그러나 내 문제는 사용자가 로그 아웃 버튼을 클릭하거나 웹 페이지를 닫거나 다른 페이지로 전환하지 않으면 어떻게이 상황을 이해할 수 있습니까?
내 메커니즘에 따르면, 사용자가 로그 아웃 할 때 DB에서 일부 삽입 및 삭제 작업이 진행 중입니다.
닫는 페이지에서 다른 페이지로 전환하고 싶습니다.
감사합니다.로그 아웃 솔루션 (ASP.NET)

+1

당신은 백엔드에서 세션 관리를 통해이 작업을 수행해야합니다 ... 당신은 사용자에 의존하거나이 작업을 수행하는 모든 클라이언트 코드를 신뢰할 수 없습니다. jquery/javascript로 수행 할 수있는 일이 있지만 실제로는 클라이언트 측에서 이러한 일이 발생할 것이라고 결코 믿을 수는 없습니다. – JoeGeeky

답변

14

로그 아웃시 DB 작업을 수행하는 것처럼 들리며 사람들이 로그 아웃 버튼을 클릭하지 않고 탐색하면 코드가 실행되지 않습니다.

global.asax에서 session_end를 살펴보십시오. 어쩌면 거기에 당신의 작전을 넣을 수 있습니다.

protected void Session_End(Object sender, EventArgs e) 
{ 
    // Your code goes here. Since your logout code probably relied on the user being 
    // logged in, you might end up checking Request.IsAuthenticated here. Why? Because 
    // this event fires any time a session ends -- even if the user is not logged in! 
} 

사용하면 브라우저가 닫힐 때가 아니라 IIS 세션이 끝날 때 실제로 실행됩니다. 기본적으로 세션은 20 분 동안 사용하지 않으면 시간이 초과됩니다.

이것을 구현하면 로그 아웃 페이지에서 Session.Abandon을 호출하여 Session_End를 트리거 할 수 있습니다. 그건 나에게 깨끗해 보인다.

여기 세션 이벤트에 대한 좀 더 자세한 사항과 MSDN 링크입니다 : http://msdn.microsoft.com/en-us/library/ms178583.aspx

+2

세션 끝은 정말로 당신이 바라는 모든 것일뿐입니다. –

+0

+1 좋은 해결책 - 그것은 우아합니다. –

0

나는 완전히 잘 모르겠지만, 나는이 구현되는 방법 중 하나가 그 원인이되는 쿠키에 만료를 설정하지 않는 것입니다 생각 브라우저를 닫을 때 잃어버린 세션 쿠키가 될 수 있습니다. 세션 쿠키에는 일반적으로 세션 키가 포함되어 있으므로 브라우저를 다시 열면 새로운 세션이 시작됩니다.

0

사용자를 시스템으로 만들 때 로그인 (세션과 비슷한 것)하는 사용자가 데이터베이스 테이블에 추가하고 타임 스탬프를 부여했습니다. 사이트를 새로 고침 할 때마다 쿼리를 실행하여 이전의 타임 스탬프가 30 분 이상인 사용자를 삭제합니다. 이것은 매우 쉬운 해결책입니다, 어쩌면 더 좋은 방법이 있습니다.

1

세션 종료는 아마도 앞서 언급 한 것처럼 최선의 방법 일 수 있지만, 편집증 환자라면 기본적으로 "I 'm still here"라고 말하기 위해 X 초마다 서버에 ping을 보내는 페이지에 javascript/AJAX를 넣을 수 있습니다. 그런 다음 세션을 끝내기 위해 20 분 정도 기다리지 않고 끝내면 더 이상 ping을 수행하지 않으므로 X 초 이내에 떠났음을 알 수 있습니다.

0

global.asax에있는 일정을 확인할 수 있습니다. session_end 이벤트로 db를 업데이트 할 수 있습니다. 각 페이지 및 컨트롤에서 시작되는 beginrequest 이벤트를 사용할 수도 있습니다 (여러 컨트롤이있는 경우 페이지 당 여러 개의 히트 수를 얻을 수 있습니다). page_load 이벤트에 뭔가를 넣을 수도 있습니다.

1

세션 시간 초과이 20 분이면 세션이 종료되어 사용자가 페이지를 떠났음을 20 분 후에 만 ​​감지합니다. Brian이 설명한 것처럼 global.asax session_end에서 세션 끝을 감지 할 수 있습니다.

페이지를 빠져 나가는 사람을 먼저 감지하는 경우 (예 : 1 분 후)에는 세션 시간 제한을 1 분으로 줄일 수 있습니다.

사용자가 페이지에서 아무 것도하지 않으면 (서버에 다시 게시하지 않음) 사용자가 페이지를 계속 보았음에도 불구하고 세션이 시간 초과됩니다.

메커니즘을 사용하면 문제를 해결할 수 있습니다.귀하의 페이지는 사용자가 귀하의 페이지를 보는 한 백그라운드에서 정기적으로 서버를 호출합니다. 이것은 숨겨진 iFrame과 같은 AJAX Javascript 또는 oher 메커니즘을 사용하여 수행 할 수 있습니다.

예를 들어보기 : ASP.NET AJAX and keeping the Session alive - What is the standard way to do it?