本文目录一览:
php利用session怎么判断用户已离线
方法有好多种,但应该都跟心跳请求类似。
首先用户打开一个页面后,页面里面会有段js脚本来反复请求一个地址,即判断用户是否在线的地址(跟新浪微博隔一段时间请求一个地址查看是否有新消息类似)
比如判断页面为A,打开的页面为B ,则B 内的js脚本以ajax请求的方式每隔1分钟来访问A,A可以记录下最后一次的请求时间,然后你就可以拿这个最后一次请求的时间来判断用户是否离线,比如B每隔1分钟发送一次请求,如果最后活动时间与当前时间相差两分钟,就可以认为用户已离线。
还有一种方法,就是利用js的onunload事件
当用户关闭浏览器的时候,可以用onunload发送一个请求,注销掉session,或者将用户状态置为离线,都可以,不过没有上面靠谱就是,因为F5刷新页面也同样触onunload事件
方法还有很多,结合你需要实现的功能和业务,多想想就出来了
PHP如何获取本地时间与服务器时间
PHP获取服务器时间和本地时间很简单,可以用内置函数实现,具体代码如下:
记得给分!!!
?php
//获取服务器时间
echo date("Y-m-d h:i:s");
//获取本地时间(也可以说是你所在时区时间)
date_default_timezone_set('地区'); //地区:中国是PRC,或shanghai,chongqing都可
echo date("Y-m-d h:i:s");
?
当然获取本地时间还可以用JS实现,如下:
script type="text/javascript"
function showLocale(objD){
var str,colorhead,colorfoot;
var yy = objD.getYear();
if(yy1900) yy = yy+1900;
var MM = objD.getMonth()+1;
if(MM10) MM = '0' + MM;
var dd = objD.getDate();
if(dd10) dd = '0' + dd;
var hh = objD.getHours();
if(hh10) hh = '0' + hh;
var mm = objD.getMinutes();
if(mm10) mm = '0' + mm;
var ss = objD.getSeconds();
if(ss10) ss = '0' + ss;
var ww = objD.getDay();
if ( ww==0 ) colorhead="font color=\"#000000\"";
if ( ww 0 ww 6 ) colorhead="font color=\"#000000\"";
if ( ww==6 ) colorhead="font color=\"#000000\"";
if (ww==0) ww="星期日";
if (ww==1) ww="星期一";
if (ww==2) ww="星期二";
if (ww==3) ww="星期三";
if (ww==4) ww="星期四";
if (ww==5) ww="星期五";
if (ww==6) ww="星期六";
colorfoot="/font"
str = colorhead + yy + "-" + MM + "-" + dd + " " + hh + ":" + mm + ":" + ss + " " + ww + colorfoot;
return(str);
}
function tick(){
var today;
today = new Date();
document.getElementById("localtime").innerHTML = showLocale(today);
window.setTimeout("tick()", 1000);
}
tick();
/script
php做用户在线与离线状态
在用户表里加个session字段存取时间戳。在文件头每次刷新就更新它。一定时间不刷新就表示人物离线了。读取这个会员数据的时候和当前时间戳对比小于一定数就离线了
怎么判断用户是在线状态还是离线状态 asp
判断用户的在线状态,后台代码必须和前台代码配合方能做到,通常前台代码用javascript编写,后台asp jsp php aspx都可以,以asp为例。
大体有两种思路。
一是即时刷新型,也就是前台每隔几秒向后台报告一下自己还在线。在后台数据库内或是Application对象中写入刷新的时间,后台管理员可以读取用户在线时间,如果超过规定的时间未刷新,则可判断用户已经离线。这种方式是使用最广泛的方式,判断准确无误,缺点是占用一定的系统资源,如果在线用户数量太多,对服务器的负荷压力比较大。
二是来去报告型。即上线报告自己来了,离线时报告自己走了,不必定时向后台报告自己是否在线,只要没报告自己离线,就认为仍然在线。技术上要依赖 DOM 的onload unload 事件,并在客户端建立cookie,在onload事件中把打开的网页数写入cookie,如cookie("OpenPageCount")++,只有当 cookie("OpenPageCount")==1 时才向后台报告自己上线,大于1只是说明多打开了几个网页而已,不必频繁向后台发送ajax请求,在unload事件中再把cookie减1,如cookie("OpenPageCount")--,直到为0才向后台发送离线状态ajax请求。这种方式准确率也不错,不必占用大量的服务器资源,主要工作都在客户端判断完成,缺点是兼容性不够好,笔者测试IE8+、FF等主流浏览器支持得都不错,但一些广泛使用的山寨浏览器对DOM事件支持不好,如360、遨游、TT、搜狗等。
相关关键技术点:
后台:数据库、Application对象、日期间隔
前台:javascript DOM Event Cookie setInterval
PHP服务器时间问题
date(‘Y-m-d H:i:s’)
结果取出来显示的时间总是于本地时间相差8个小时,我的本机是中国标准时间(GTM+8),问题应该是date()取的时间是格林威治时间,那应该怎么配置一下PHP服务器呢?
问题原因所在
从php5.1.0开始,php.ini里加入了date.timezone这个选项,默认情况下是关闭的
也就是显示的时间(无论用什么php命令)都是格林威治标准时间
和我们的时间(北京时间)差了正好8个小时。
有以下3中方法可以恢复正常的时间。
1、最简单的方法就是不要用php5.1以上的版本
2、如果一定要用,而且不能修改php.ini,则需要在关于时间的初始化的语句的
上面加上 date_default_timezone_set (‘XXX’);
3、一劳永逸,仅限能修改php.ini。打开php.ini查找date.timezone 去掉前面的分号
date.timezone = PRC,重启http服务(如apache2或iis等)即可