发布网友 发布时间:2022-04-06 00:40
共2个回答
懂视网 时间:2022-04-06 05:02
php判断页面是否关闭的方法:可以利用connection_status()函数来进行判断。如果该函数返回0,则表示连接运行正常;如果返回1,则表示连接由用户或网络错误终止。
相关函数介绍:
connection_status() 函数返回当前的连接状态。
(推荐教程:php视频教程)
可返回的可能值:
0 - CONNECTION_NORMAL - 连接运行正常
1 - CONNECTION_ABORTED - 连接由用户或网络错误终止
2 - CONNECTION_TIMEOUT - 连接超时
3 - CONNECTION_ABORTED & CONNECTION_TIMEOUT
代码实现:
echo str_repeat(" ",3000); ignore_user_abort(true); mylog('online'); while (true) { /* * 1、程序正常结束 connection_status 0 * 2、点击浏览器“停止”按钮 connection_status 1 * 3、超时 connection_status 2 */ echo "test<br> "; //注意程序一定要有输出,否则ABORTED状态是检测不到的 flush(); sleep(1); if (connection_status()!=0){ mylog('offline'); die('end the script'); } } function mylog($str) { $fp = fopen('e:/abort.txt', 'a'); $str = date('Y-m-d H:i:s').$str." "; fwrite($fp, $str); fclose($fp); }
热心网友 时间:2022-04-06 02:10
普通http网站是一种无状态连接,每次一个请求,一个应答,没有长连接状态。
但是可以通过记录访问时间,来确定用户的状态。
用户登录后,每次访问,更新一下最近访问时间在数据库里
在用户页面的公共部分,做一个定时轮询,n秒一次(防止用户打开页面后放着不动,看资料或者做别的)
服务器端做一个定时,将最近时间在n秒内的用户设为在线状态,将最近时间大于n秒的(说明已经关了页面),设为离线状态。 如果是普通 web空间无法配置定时器,可以在每次用户访问时处理一次(如果用户量大,需要做时间判断,防止同时访问量多时多次重复处理,影响服务器性能)
如果能确定一个用户的访问,只有一个浏览器窗口,可以在窗口里加一个关闭事件(onbeforeunload),在此事件中发送一个退出请求,主动设为离线状态。这样状态管理会更完美一些
这样基本就可以完成一个在线状态的管理。具体n 设为多少可根据情况而定,一般5-30秒都是合理的,太短了服务器压力比较大,太长了误差会比较大