您好,很高兴回答您的问题,希望我的回答能帮助到您,蟹蟹
用户在线时长计算,首先,用户登录成功把登录时间以及用户id保存在session中
当用户退出时,当前时间减去登录时间就是用户在线时长
//用户登录public function dologin(){
$adminname = I("param.adminname","","trim")//用户名
$password = I("param.password","","trim")//密码
$where = "adminname = '{$adminname}' and password = md5('{$password}')"
$data['login_time'] = time()
$is_find = M("users_admin")->where($where)->find()
if($is_find){
$result = M("users_admin")->where($where)->setField($data)
if ($result){
$_SESSION['uid'] = $is_find['id']
$_SESSION['login_time'] = $data['login_time']
echo("登录成功")
}
}
} //用户退出代码
public function logout(){
$login_time = $_SESSION['login_time']
$now = time()
$line_time = $now-$login_time
$result = M("users_admin")->where("id = ".$_SESSION['uid'])->setField('line_time',$line_time)
session(null)
echo("成功退出")
}
楼上说的差不多,我再详细说一下:登陆以后你肯定会记录它的session值,可以把它写入到一个保存session的表中,并记录登陆时间,然后其中加上一个标志字段,用来判断其状态,如果用户退出则可以删除其session记录,这样你可以根据时间来判断任意时间段内在线的用户,你可以再自行设置条件,如多长时间没有活动就删除session等,这样我觉得实现应该是比较简单的,这就是一个思路,更详细的你可以扩展想一想。在用户数据库里面增加 状态数据字段,例如在线为1,离开为0,隐身为2,等等
登录的时候进行查询,
如果为1或者2,就进行怎么处理,
如果为0也就是已经退出了,就进行怎么处理
自己试下,我会关注的
要写的与qq一样的话有点难度
1,用户关闭浏览器发送注销请求
2,如果发送失败,
服务器端处理,用户很长时间(例如30分钟)没有反应,就给注销掉
1,我想客户端还可以每5分钟发送一次请求,看网络是否畅通,如果失败还可以显示客户掉线的功能,然后是否重新连接
2,这样的话,我们可以记录客户最后在线的时间了,比较现在的时间和最后在线的时间就很好解决了
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)