java - 根据一张登录登出日志表计算每个用户在线时长,求个思路
阿神
阿神 2017-04-18 10:31:06
0
5
1718

有一张日志表,记录着每个用户的操作日志信息,例如登录或注销,每个操作都有对应的createtime,以及当前的userName

  • 需求如下:

    • 统计每个用户在一天内在线时长(登录到注销这段时间,可能一天登录注销多次)

    • 如果用户电脑直接关机,或者非正常关闭系统,这时日志表不会产生注销日志,所以将用户最后一次的操作日志(可能是增删改查)作为注销时间,进行在线时长的计算

  • 疑问:

    • 我觉得在日志记录的时候需要记录每次会话的sessionId,否则无法进行上面计算?

阿神
阿神

闭关修行中......

모든 응답(5)
Peter_Zhu

세션ID를 기록할 필요가 없습니다. 세션ID를 사용하여 비정상 종료의 마지막 작업 시간을 기록하시겠습니까?
동일 사용자가 로그인한 마지막 데이터는 로그아웃 동작이어야 합니다
1. 정상 로그아웃, 다음 데이터는 로그인이어야 합니다
2. 정상 동작 후 비정상 종료 , 수정, 확인) 다음번에도 동일해야 로그인 작업입니다

따라서 로그인 길이는 현재 로그인 시간, 즉 다음 로그인 전 이전 기록의 시간입니다.

단, 비정상적으로 종료된 후 사용자가 로그인하지 않는 경우에는 별도로 처리해야 합니다. 예를 들어 sessionid가 20분 동안 작업 없이 만료된 경우 마지막 기록이 20분 이상 전인지 확인합니다. 20분 이상 경과시 비정상 종료로 간주됩니다.

黄舟

어쨌든 어떤 사용자의 행동 로그인지 판단하려면 사용자 식별이 있어야 합니다.

로그 작성시 각 로그인과 로그아웃의 시간차를 로그에 기록하고 마지막에 합산하나요?

Ty80

테이블은 이렇게 디자인해도 됩니다

으아악

로그인 시 로그인 시간이 세션에 기록되며, 종료 시간은 로그인 시간 + 타임아웃 시간으로 설정됩니다.

사용자가 활성 상태이면 세션에 기록된 로그인 시간을 기준으로 해당 기록의 종료 시간이 업데이트됩니다(현재 시간 + 제한 시간 시간).

종료 시 세션에 기록된 로그인 시간에 따라 해당 기록의 종료 시간이 현재 시간으로 업데이트됩니다.

巴扎黑

원래 테이블(가정):

으아악

최종 생성된 테이블:

으아악

세부 과정:

으아악

아이디어 좀 주세요. 개인적으로 구현하기 쉽지 않다고 생각합니다(논리적 처리에는 PHP가 필요하고, 페이징도 번거롭습니다. 날짜별로 페이징으로 표시해야 하는데, 촬영된 레코드 수에 따라 표시되지는 않습니다). limit 1 , 10 페이징의 경우 단일 SQL은 최종 테이블 구조를 얻을 수 없으므로 여기서만 갈 수 있습니다....

洪涛

모두에게 질문해도 될까요? 로그인을 기록할 수 있는데 로그아웃은 어떻게 기록하나요? 사용자가 실제로 로그아웃 버튼을 클릭하지 않을 수도 있습니다. 웹이라면 사용자는 브라우저를 닫고 그대로 두면 됩니다. 언제 로그아웃했는지 어떻게 알 수 있나요? 세션?

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!