onunload +JS定时器 + ajax 实现
每秒写一次数据库肯定是不行的资源释放都来不及,使用js计时器,在离开页面时,调用ajax异步插入数据库,即不延迟跳转,也不会占用资源,插入完就释放了
HTML onunload 事件属性
定义和用法
onunload 属性会在页面下载时触发(或者浏览器窗口已关闭)。
onunload 在用户从页面导航离开时发生(通过点击链接、提交表单或者关闭浏览器窗口等等)。
注释:如果您重载页面,也会触发 unload 事件(以及 onload 事件)。
记录当前页面存在时间var ele_timer = document.getElementById("timer");
var n_sec = 0; //秒
var n_min = 0; //分
var n_hour = 0; //时
//60秒 === 1分
//60分 === 1小时
function timer() {
return setInterval(function () {
var str_sec = n_sec;
var str_min = n_min;
var str_hour = n_hour;
if ( n_sec < 10) {
str_sec = "0" + n_sec;
}
if ( n_min < 10 ) {
str_min = "0" + n_min;
}
if ( n_hour < 10 ) {
str_hour = "0" + n_hour;
}
var time = str_hour + "," + str_min + "," + str_sec;
ele_timer.value = time;
n_sec++;
if (n_sec > 59){
n_sec = 0;
n_min++;
}
if (n_min > 59) {
n_sec = 0;
n_hour++;
}
}, 1000);
}
var n_timer = timer();
function test(){
var ele_timer = $("#timer").val();
$.ajax({
url: "{:U('Index/index2')}",
type: "post",
data: {
ele_timer:ele_timer,
},
dataType: "json",
success: function(data) {}
});
}
后台代码:
public function index(){
dump(session('ele_timer'));
$this->display();
}
public function index2(){
$ele_timer = I('ele_timer');
session('ele_timer',$ele_timer);
return true;
}
public function index_post(){
dump(I(''));
dump(session('ele_timer'));
die;
}