>  기사  >  백엔드 개발  >  PHP에서 사용자 온라인 시간 통계를 구현하는 방법에 대한 자세한 설명

PHP에서 사용자 온라인 시간 통계를 구현하는 방법에 대한 자세한 설명

高洛峰
高洛峰원래의
2016-11-30 13:28:351824검색

먼저 관련된 데이터 테이블 구조, 네 개의 필드를 소개합니다.
코드는 다음과 같습니다.
uid: user id
session_id: user PHP는 session_id() 함수를 사용하여 로그인 후 시스템에서 생성된 session_id를 얻을 수 있습니다.
login_time: 로그인 시간
logout_time: 로그아웃 시간

1. 클라이언트는 정기적으로 서버에 요청을 보냅니다. 구현 방법은 사용자가 로그인한 후 uid, session_id, login_time을 레코드에 삽입한 다음 클라이언트 js에 타이머를 설정하는 것입니다. 예를 들어 10분마다 서버에 요청을 보내 로그아웃 시간을 업데이트하는 목적을 달성합니다. 물론, 간격을 짧게 설정할수록 데이터가 정확해질 수 있지만, 실제 상황에 따라 적절한 값으로 설정될 수 있습니다. 이 방법은 웹 게임의 거의 모든 요청이 ajax 요청이고 페이지를 새로 고칠 필요가 없기 때문에 웹 게임에서 널리 사용됩니다.

2. 서버에 예약된 폴링 스크립트를 설정합니다. 이 방법은 서버 측에서 예약된 실행 스크립트를 작성하는 것입니다. 예를 들어 5분마다 한 번씩 실행합니다. 데이터베이스의 기록을 기반으로 각 세션의 session_id가 서버에 여전히 존재하는지 판단합니다. , logout_time이 업데이트되지 않으면 건너뜁니다. 이 방법도 온라인 시간을 정확하게 계산할 수 있지만 서버를 제어해야 한다는 단점이 있습니다. 그렇지 않으면 타이밍 스크립트를 설정할 수 없습니다. Linux 시스템은 crontab을 통해 이를 수행할 수 있고 Windows 시스템은 예약된 작업을 통해 이를 수행할 수 있습니다. 방금 가상 호스트를 구입했다면 이 방법도 적합하지 않습니다.

3. 사용자가 활동을 수행할 때마다 로그아웃 시간을 업데이트합니다. 이런 방식으로 사용자가 비활성 상태이거나 로그아웃하면 로그아웃 시간이 자연스럽게 데이터베이스에 존재하게 됩니다. 이 기사에서 중점적으로 다루는 해결 방법이기도 합니다. 구현 방법은 아래와 같습니다.
먼저 사용자가 성공적으로 로그인한 후 uid와 session_id를 기록하고 현재 시간을 로그인 시간으로 사용하고 현재 시간인 600s를 로그아웃 시간으로 사용하여 데이터베이스에 삽입합니다.
코드는 다음과 같습니다.
코드를 복사합니다. 코드는 다음과 같습니다.
$uid = $_SESSION[uid] = $info[id]
$session_id = $_SESSION[session_id]; = session_id();
$login_time = time();
$logout_time = time() 600;
$sql = "member_login(uid,session_id,login_time,logout_time) 값($uid, $session_id,$login_time,$ logout_time)";
mysql_query($sql);

그러면 사용자가 행동할 때마다, 즉 페이지를 클릭할 때마다 세션이 존재하면 즉, 로그인하면 사용자의 로그아웃 시간을 업데이트합니다.
코드는 다음과 같습니다.
if($_SESSION[uid]){
$uid = $_SESSION[uid]
$ session_id = $_SESSION[session_id];
$logout_time = time() 600;
$sql = "upDATE member_login SET logout_time=$logout_time WHERE uid=$uid AND session_id=$session_id"; $sql);
}

이 방법의 장점은 비교적 구현이 간단하고 대부분의 웹사이트에 적용할 수 있으며 추가 서버 요구 사항이 없으며 사용자의 온라인 시간을 정확하게 계산할 수 있다는 것입니다.

단점도 뚜렷하지만, 데이터베이스 업데이트 작업이 늘어나 시스템 부하가 늘어나지만 중소 규모 웹사이트에서는 문제가 되지 않습니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.