문제

ASP.NET에서는 응용 프로그램을 떠나는 사용자를 감사하는 방법을 찾고 있습니다. 구체적으로 말하면, 사용자 세션이 어떤 이유로 든 포기/파괴 될 때 SQL Server의 감사 테이블에 '로그 아웃'레코드를 삽입하고 싶습니다 (반드시 세션에 대한 전화로 인해 필요한 것은 아닙니다. Abandon).

세션 세터/getters를 관리하는 'SessionHelper'클래스가 있습니다.

Global.asax의 Session_end에 다시 게시하려고 시도했지만 시간 초과가 만료 된 후에도이 이벤트를 해고하지 않았습니다.

나는 세션 헬퍼 클래스에서 'Finalize'를 우선적으로 시도하고 수업이 파괴 될 때 그곳에서 그것을 수행했지만 그 사건들도 해고되지 않았습니다.

SessionHelper에서 idisposable을 구현하려고 시도했지만 항상 호출되도록 어디에 호출 해야하는지 모르겠습니다.

ASP.NET 응용 프로그램을 떠나는 사용자를 감사하는 올바른 방법은 무엇입니까?

고맙습니다!

도움이 되었습니까?

해결책

Session_end 이벤트는 인프로 세션이있는 경우에만 해고됩니다. SQL 또는 State Server 세션 관리는이 이벤트를 해고하지 않습니다. 가능하면 Inproc 세션으로 돌아가이 이벤트를 사용하십시오.

그 외에도, 당신은 매우 좋은 솔루션을 얻지 못할 것입니다. ASP.NET은 서버의 현재 세션 목록을 볼 수있는 방법을 제공하지 않습니다 (적어도 질문을 이미 요청했기 때문에 StackOverFlow 사용자가 알 수있는 방법은 없으므로 작업을 사용할 수 없습니다. 그들이 파괴되는시기를 확인하십시오.

다음으로 가장 좋은 점은 "마지막 액세스 시간"을 사용자에게 어딘가에 저장하고 세션의 시간 초과를 감지하는 데 사용하는 것입니다. 이러한 작업의 구현은 복잡합니다 (예 : 사용자가 빠르게 로그인/빠르게 로그인하면 로그 아웃 이벤트를 놓칠 수 있습니다) ...

여기에 완벽한 솔루션이 없습니다.

다른 팁

"적절한 방법"에 대해 확인하십시오. 그러나 여기에 내가 과거에 한 방법이 있습니다.

데이터베이스의 사용자 레코드와 관련된 "활성"날짜 시간 스탬프가 있습니다. 사용자가 페이지에 액세스 할 때마다 현재 시간으로 업데이트됩니다. 누군가가 15 분 안에 페이지에 액세스하지 못한 경우 해당 사용자는 "로그 아웃"이벤트로 기록되고 타임 스탬프가 NULL로 설정됩니다.

기껏해야 로그 아웃 레코드는 세션 이벤트가 올바르게 작동하는 경우에도 사용자가 사이트/앱을 떠난시기를 지능적으로 추측 할 것입니다. 사용 할 수있는 기술은 사용자가 로그인 할 때 로그 아웃 시간을 DB에 배치하고 시스템을 사용할 때 향후 시간으로 레코드를 계속 업데이트하는 것입니다. 다음은 최근에 사용한 세션 테이블의 일반적인 스키마입니다.

[Id]  [Uid]    [LoginInOn]        [ExpiresOn]  
 1    johndoe  10/14/2008 10:47   10/14/2008 11:07  

이 테이블에서는 사용자가 응용 프로그램과 상호 작용할 때 Expireson 열을 계속 업데이트합니다 (현재 시간 + 20 분). 만약 만약 후에 상호 작용하려고한다면, 나는 그들이 20 분 동안 유휴 상태 였고 새로운 로그인을 강요한다는 것을 알고 있습니다. 보고 목적으로, 나는 현재 시간이 만료보다 큰 경우 사용자가 로그 아웃했다는 것을 알고 있습니다. 당신은 이것보다 더 복잡해질 수 있습니다. 예를 들어, 위에 나열된 세션 테이블에서 데이터를 정기적 인 프로세스로보고 테이블로 옮깁니다. 이것은 많은 물건이 상호 작용하기 때문에 세션 테이블을 작게 유지하기위한 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top