判斷使用者是否線上的代碼

來源:互聯網
上載者:User

考慮兩種情況:
(1)使用者關閉瀏覽器或重新導向到其他網頁
複製代碼 代碼如下:
<script type=text/javascript>
function exit_init() {
if(xmlhttp.readyState==4){
if(xmlhttp.status==200){ //
}
else{
alert("there was a problem accessing the server:"+xmlhttp.status);
}
}
}
//定義windows 的onbeforeunload 事件,當使用者非正常退出即瀏覽器非正常關閉時,對使用者登入狀態進行處理
window.onbeforeunload=function () {
//if(event.clientY<0||event.altKey) {
exit_request = false;
//建立請求對象
if (window.XMLHttpRequest) {
exit_request = new XMLHttpRequest();
if (exit_request.overrideMimeType){
exit_request.overrideMimeType('text/xml');
}
} else if (window.ActiveXObject) {
try{
exit_request = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
exit_request = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {
}
}
}
if (!exit_request) {
alert("Your brower is not compatible the current opration.Please use the IE 5.0! ");
return false;
}
var url='null.php?userid='+document.getElementById("userid").value;
//定義頁面調用的方法exit_init,不是exit_init();沒有();
exit_request.onreadystatechange = exit_init;
exit_request.open('GET', url, true);
//禁止IE 緩衝
exit_request.setRequestHeader("If-Modified-Since","0");
//發送資料
exit_request.send(null);
}
//}
</script>

說明:null.php用來將使用者狀態設為下線
(2)使用者長時間不再瀏覽本網站
思路:建立表active_stat,屬性有userid,lasttime,nowtime。使用者每開啟一次本網站,更改lasttime為目前時間now(),每隔1分鐘更改nowtime為目前時間,判斷nowtime-lasttime是否大於20分鐘,若大於,則修改使用者狀態為下線
複製代碼 代碼如下:
<script language=javascript>
function test(userid){
setInterval("offline('"+userid+"')", 60000 ); //每隔1分鐘執行一次
}
function offline(userid){
var xmlhttp=false;
try{
xmlhttp=new activeXObject('Msxml2.XMLHTTP');
}catch(e){
try{
xmlhttp=new ActiveXObject('Microsoft.XMLHTTP');
}catch(e){
try{
xmlhttp=new XMLHttpRequest();
}catch(e){}
}
}
if(xmlhttp.readyState==4||xmlhttp.readyState==0)
{
xmlhttp.open('get','../user/include/offline.php?userid='+userid,false);
xmlhttp.onreadystatechange=function(){
if(xmlhttp.readyState==4){
if(xmlhttp.status==200){
//
}
else{ alert("there was a problem accessing the server:"+xmlhttp.status);}
}
}
xmlhttp.send(null);
}
}
</script>
<BODY onLoad="test('<? echo $userid;?>');">

offline.php
複製代碼 代碼如下:
<?php
//串連資料庫
$userid=$_GET["userid"];
pg_exec("update active_stat set nowtime=now() where userid='".$userid."';");
$result=pg_exec($dbconn,"select (nowtime-lasttime) as activetime from active_stat where userid='".$userid."'");
$str=pg_result($result,0,"activetime");
if(strlen($str)>16){
$array=explode(" ",$str);
$t=explode(":",$array[1]);
$t[0]=$t[0]+$array[0]*24;
$s=explode(".",$t[2]);
$t[2]=$s[0];
$y=((int)$t[0])*3600+((int)$t[1])*60+((int)$t[2]);
}
else{
$total_time=explode(".",$str);
$x=explode(":",$total_time[0]);
$y=((int)$x[0])*3600+((int)$x[1])*60+((int)$x[2]);
}
if($y>=1200){
pg_exec("update users set status='f' where userid='".$userid."';");
}
?>

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.