JavaScript实现session超时提示:非服务端监测与定时逻辑
本文档主要介绍了如何在JavaScript(JS)环境中实现session超时提示功能,而不依赖于服务器端的服务请求。开发者使用了window.event对象来监测用户的鼠标活动,结合定时器和DOM操作来动态显示剩余时间并触发警告。以下是详细的步骤和技术点: 1. 定义变量和函数: - `timeIndex`:计数器,用于记录用户未活动的时间。 - `divtime`:一个包含超时提示的HTML元素,会在计数到零后显示。 - `timer`:存储定时器引用,用于控制检查超时的间隔。 2. `mousestatus`函数:当用户点击鼠标(左键或滚轮)时,重置`timeIndex`,防止因点击而误判超时。 - 通过`document.onclick`事件监听全局的点击事件,并调用此函数。 3. `checkTimeOut`函数:这是一个定时检查超时的核心函数。每隔1秒执行一次,更新`timeIndex`,并在达到10秒(默认设置)时调用`timeout`函数。这里使用的是`setInterval`方法,而非$.get异步请求,因为题目强调了不依赖服务请求。 4. `timeout`函数:当`timeIndex`达到0时,显示超时提示div(`divtime`),同时调用`reduceX`函数,开始倒计时。当倒计时结束(`x`值小于1),页面跳转到注销登录页面。 5. `reduceX`函数:每秒递减`x`值,更新`timeoutDiv`的文本,当`x`为0时,关闭提示框并执行注销操作。 6. 使用`$.jBox`插件展示超时提示,它提供了关闭提示框时的回调函数,用于清除定时器,确保在超时提示被关闭后停止进一步的计时逻辑。 通过这些函数的组合,实现了客户端的session超时检测和用户友好提示,提供了一种不依赖服务器端实时刷新的本地超时处理方案。这种方法适合于对用户体验要求较高,或者网络环境不稳定的情况下使用。
var divtime = "<div>session is about to expire...<div id='timeoutDiv' align='center'></div></div>";
var timer;
var x = 10;
//?听鼠?事件,如果?????重置
function mousestatus(e) {
e = e || event;
btn = e.button;
if(btn == 0 || btn == 2){
timeIndex = 0;
}
}
document.onclick = mousestatus; //全局的onclick事件
//通??求?判?Session超?,不推荐。
/*function checkTimeOut(){
$.get("checktimeout.html?type=timeout",null,function(data){
if(data == "true"){
timeIndex = 0;
}else{
timeIndex++;
}
if(timeIndex >= 10){
timeIndex = 0;
timeout();
}
});
}*/
//判?是否超?,超???出提示框
function checkTimeOut(){
下载后可阅读完整内容,剩余1页未读,立即下载
<?php header("Content-Type: text/html; charset=UTF-8"); $expires = 60 * 20; //session 超时时间 function check_user_agent() //构造函数检查 User-Agent 的一致性 { if (isset($_SESSION['HTTP_USER_AGENT'])) { if ($_SESSION['HTTP_USER_AGENT'] != md5($_SERVER['HTTP_USER_AGENT'])) //user-agent 不一致 { exit('客户端信息异常'); } } else { $_SESSION['HTTP_USER_AGENT'] = md5($_SERVER['HTTP_USER_AGENT']); } } function start_session($expire = 0) { session_start(); if ($expire != 0 && isset($_SESSION['last_visit'])) { $time_last = time() - $_SESSION['last_visit']; if (isset($_SESSION['expiretime'])) //如果超时 { session_unset(); session_destroy(); exit("请重新登录"); } } $_SESSION['last_visit'] = time(); //检查 user-agent 一致性 session_regenerate_id(true); //重置 SessionID } ?>补全这段代码
- 粉丝: 0
- 资源: 1
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 李兴华Java基础教程:从入门到精通
- U盘与硬盘启动安装教程:从菜鸟到专家
- C++面试宝典:动态内存管理与继承解析
- C++ STL源码深度解析:专家级剖析与关键技术
- C/C++调用DOS命令实战指南
- 神经网络补偿的多传感器航迹融合技术
- GIS中的大地坐标系与椭球体解析
- 海思Hi3515 H.264编解码处理器用户手册
- Oracle基础练习题与解答
- 谷歌地球3D建筑筛选新流程详解
- CFO与CIO携手:数据管理与企业增值的战略
- Eclipse IDE基础教程:从入门到精通
- Shell脚本专家宝典:全面学习与资源指南
- Tomcat安装指南:附带JDK配置步骤
- NA3003A电子水准仪数据格式解析与转换研究
- 自动化专业英语词汇精华:必备术语集锦