php에서 사용자의 온라인 시간을 통계하는 시도

다음은 비교적 자주 사용하는 몇 가지 방법을 열거한다. 먼저 관련된 데이터 테이블 구조, 네 개의 필드를 소개한다
 
uid<int(10)> : id
session_id<varchar(40)> : session_id,PHP session_id()
login_time<int(10)> :
logout_time<int(10)> :
1. 클라이언트가 시간에 따라 서버에 요청을 보냅니다.실현 방법은 사용자가 로그인한 후 uid,session_id,login_time는 기록을 삽입한 다음에 클라이언트 js에 타이머를 설정합니다. 예를 들어 10분마다 서버 측에 요청을 보내서 로그아웃 시간을 업데이트하는 목적을 달성합니다. 물론 이 간격이 짧을수록 데이터가 정확할 수 있지만 상응하는 시스템의 부하도 높아집니다. 이것은 실제 상황에 따라 적당한 값을 설정할 수 있습니다.이런 방법은 웹 게임에 광범위하게 응용된다. 왜냐하면 웹 게임의 거의 모든 요청은 aax 요청이기 때문에 페이지를 새로 고칠 필요가 없다. 일단 페이지를 새로 고침하면 이 타이머는 가치를 잃게 된다. 이것도 이 방법의 한계이다.2. 서버는 정해진 시간에 폴링하는 스크립트를 설정합니다.이 방법은 서버에서 정해진 시간에 실행되는 스크립트를 작성하는 것입니다. 예를 들어 5분에 한 번 실행하고 데이터베이스에 기록된 내용에 따라 세션마다session_id가 서버에 존재하는지 여부, 존재하면 logout_ 업데이트time, 존재하지 않으면 건너뛰기.이렇게 하면 온라인 시간을 비교적 정확하게 통계할 수 있지만 단점은 서버의 제어권이 있어야 한다는 것이다. 그렇지 않으면 정시 스크립트를 설정할 수 없다. linux 시스템은crontab를 통해 실현할 수 있고 윈도우즈 시스템은 계획 작업을 통해 완성할 수 있다.만약 네가 단지 가상 호스트를 샀을 뿐이라면, 이 방법도 마찬가지로 너에게 적합하지 않다.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 = "INSERT INTO member_login (uid,session_id,login_time,logout_time) values($uid,'$session_id',$login_time,$logout_time)";
mysql_query($sql);
그리고 사용자가 활동할 때마다, 즉 한 페이지를 클릭할 때마다session이 존재하거나 로그인 상태에 있을 때 사용자의 로그인 시간을 업데이트합니다
 
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'";
mysql_query($sql);
}
이런 방법의 장점은 상대적으로 실현하기가 비교적 간단하고 대부분의 사이트에 적용할 수 있으며 추가 서버 수요가 없고 사용자의 온라인 시간을 비교적 정확하게 통계할 수 있다는 것이다.단점도 뚜렷하다. 데이터베이스 업데이트 조작을 늘리고 시스템의 부하를 증가시켰지만 중소형 사이트에는 문제가 되지 않을 것이다.

좋은 웹페이지 즐겨찾기