|
发表于 2018-6-22 11:17:24
|
显示全部楼层
给你贴点代码,自己研究下服务器端代码,位置在 index.php/welcome/uon
PHP复制代码
public function uon (){
$fltime=30;//接受AJAX时间:1分钟
$kicktime=70;//转移页面1.5分钟认为不在线
// read_file($file);
$lasttime =file_get_contents('./userfiles/time.dat');//上次时间
$now=time();
$bonline=isset($_SESSION['id']);
if ($lasttime+$fltime<$now)
{//uarr:key[uid]:IP,lastactive
$onlineuarr = file_get_contents('./userfiles/user.dat');
if (($onlineuarr=='')&&!$bonline)
{
// echo json_encode(array('c'=>0));//0无在线无登陆
exit;
}
if ($onlineuarr)
{
$onlineuarr=unserialize($onlineuarr);
}
$oldarr=$onlineuarr;
if ($bonline)//如果是登陆状态,则先进行更新active时间
{
$uid=$_SESSION['id'];
$ip=$this->input->ip_address();
if (!isset($onlineuarr[$uid]))
{
$onlineuarr[$uid]=array($ip,$now);
}else {
if ($ip==$onlineuarr[$uid][0])
{
$onlineuarr[$uid][1]=$now;
}else{
$this->ion_auth->logout();
echo json_encode(array('ip'=>$onlineuarr[$uid][0]));//1相同账号已经登录,被迫下线
exit;
}
}
}
if ($onlineuarr)
{
foreach ($onlineuarr as $uid => $v) {//清理列表
if ($v[1]+$kicktime<$now)//如果不动作时间>600S
{
unset($onlineuarr[$uid]);//剔除
}
}
}
$this->input->set_cookie('ajaxtime',$now,0);//写入COOKIE 供客户端调用
file_put_contents('./userfiles/time.dat', $now,LOCK_EX );//写入时间文件
if ($onlineuarr)
{
if ($oldarr!=$onlineuarr)
{
file_put_contents('./userfiles/user.dat', serialize($onlineuarr),LOCK_EX );//写入USER文件
}
}else file_put_contents('./userfiles/user.dat', '',LOCK_EX );//写入USER文件
}
}
复制代码
客户端页面导入JS文件,内容为:
JS复制代码
//读取COOKIE
function getCookie(name){
var strCookie=document.cookie;
var arrCookie=strCookie.split("; ");
for(var i=0;i<arrCookie.length;i++){
var arr=arrCookie[i].split("=");
if(arr[0]==name)return arr[1];
}
return "";
}
/**
* flush
*/
function uon() {
var spacet=30;//间隔时间
var url=_ServerValue.path.base_url+'index.php/welcome/uon';
var lastime=getCookie('ajaxtime');
if (lastime=="") {
$.get(url, {}, function (data){
if (data!=null) {
KS.showTips('你的账号已经在IP:'+data.ip+'处登录,您被迫下线,如有疑问请联系管理员',1,4);
setTimeout("window.location.reload()", 4000);
}
},'json');
}else{
if (parseInt(lastime)+spacet<_ServerValue.time) {
$.get(url, {}, function (data){
if (data!=null) {
KS.showTips('你的账号已经在IP:'+data.ip+'处登录,您被迫下线,如有疑问请联系管理员',1,5);
setTimeout("window.location.reload()", 5000);
}
},'json');
}
}
setTimeout("uon()",30000);
}
jQuery(function($){
uon();
});
复制代码
代码应该能看懂,懒得说了.
|
|