ajax轮询session不失效,如何通过轮询实现session自动注销

每个用户在访问完网站后,经常会忽略注销账户,session默认存在的时间为30分钟,因此如果需要立即关闭session而又不用麻烦用户则可以通过轮询的方法来实现。

以下通过代码的讲解:

xml配置文件

PollingServlet

PollingServlet

com.qf.cotroller.PollingServlet

1

PollingServlet

/PollingServlet

MyListener

com.qf.listener.MySessionListener

轮询servlet的代码实现

public class PollingServlet extends HttpServlet {

private static final long serialVersionUID = 1L;

/**

* @see HttpServlet#HttpServlet()

*/

public PollingServlet() {

}

/**

* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)

*/

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

doPost(request, response);

}

/**

* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)

*/

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

}

@Override

public void init() throws ServletException {

// TODO Auto-generated method stub

System.out.println("轮询开始啦!!!");

//创建定时器对象

Timer timer = new Timer();

timer.schedule(new TimerTask() {

@Override

public void run() {

//从Context全局对象中获取存储session集合的全局变量map

Map map = (Map)getServletContext().getAttribute("map");

if(map!=null){//非空则执行以下操作

Set> set = map.entrySet();

for (Entry entry : set) {//遍历集合中每个session

long curDate = new Date().getTime();

long lastTime = entry.getValue().getLastAccessedTime();

if((curDate - lastTime)/1000 > 10){//当session没有操作的时间超过10秒则销毁

entry.getValue().invalidate();

map.remove(entry.getKey());

}

}

}

}

}, 0, 1000);//每一秒查询一次sessionmap

}

}

public class MySessionListener implements HttpSessionListener {

@Override

public void sessionCreated(HttpSessionEvent evt1) {

System.out.println("session创建了!!!");

HttpSession session = evt1.getSession(); //获取session

//获取用于存储session的全局变量map

Map map = (Map)session.getServletContext().getAttribute("map");

if(map == null){//如果第一次存则创建一个map

map = new HashMap();

}

map.put(session.getId(), session);//将session存入map中

session.getServletContext().setAttribute("map", map);

}

@Override

public void sessionDestroyed(HttpSessionEvent evt1) {

System.out.println("session销毁了!!!");

}

}

以上为通过轮询销毁session的代码实现哦!!!!

java用while循环设计轮询线程的性能问题

java用while循环设计轮询线程的性能问题 轮询线程在开发过程中的应用是比较广泛的,在这我模拟一个场景,有一个队列和轮询线程,主线程往队列中入队消息,轮询线程循环从队列中读取消息并打印消息内容.有 ...

WPF非轮询方式更新数据库变化SqlDependency(数据库修改前台自动更新)

上一章节我们讲到wpf的柱状图组件,它包含了非轮询方式更新数据库变化SqlDependency的内容,但是没有详细解释,现在给大家一个比较简单的例子来说明这部分内容. 上一章节: WPF柱状图(支持数 ...

Ajax轮询消息自动提示(消息盒子)

经过一下午写了个消息盒子的例子,用的是ajax方式轮询读取,没有用到后台自动“推”数据的方式,效果良好.

Postman实现数字签名,Session依赖, 接口依赖, 异步接口结果轮询

Script(JS)为Postman赋予无限可能 基于Postman 6.1.4 Mac Native版 演示结合user_api_demo实现 PS 最近接到任务, 要把几种基本下单接口调试和持续集 ...

使用Azure Functions 在web 应用中启用自动更新(一)分析基于轮询的 Web 应用的限制

1,引言 上一篇介绍了使用使用 Visual Studio 开发 "Azure Functions" 函数,此篇介绍 “Azure Functions” 的测试以及直接从 Vist ...

基于springboot实现轮询线程自动执行任务

本文使用: Timer:这是java自带的java.util.Timer类,这个类允许你调度一个java.util.TimerTask任务.使用这种方式可以让你的程序按照某一个频度执行,但不能在指定时 ...

nginx负载均衡 加权轮询和ip_hash

下面给大家总结了几种真正的nginx负载均衡的功能了,在此我们加了一个权重判断法就是根据nginx负载的状态实现分配访问用户到权重值少的机器了,具体配置如下. nginx为后端web服务器(apach ...

Nginx中的upstream轮询机制介绍

Nginx中upstream有以下几种方式: 1.轮询(weight=1) 默认选项,当weight不指定时,各服务器weight相同, 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器d ...

支持阻塞操作和轮询操作的globalfifo设备驱动代码分析以及测试代码

#include #include #include #include ...

随机推荐

C#代码示例_定义类

默认情况下,类声明为内部的,即只有当前项目中的代码才能访问它.可以使用internal访问修饰符关键字显示指定. 除了两个访问修饰符关键字(public, internal)外,还可以指定类是抽象的( ...

cocos2dx中的CCRect的用法

CCRect是cocos2dx中的一块矩形区域 常用于碰撞检测及渲染时限定纹理的大小 CCRect rect=spr.boundingBox(); CCRect rect=CCRect(0,0,spr ...

Android 去除list集合中重复项的几种方法

因为用到list,要去除重复数据,尝试了几种方法.记录于此... 测试数据: List li2 = new List

spring jdbc.property的配置与使用

jdbc.properties driver=com.mysql.jdbc.Driver url=jdbc:mysql://127.0.0.1:3306/ssi1 username=root pass ...

2014.9.16HTML表单CSS

(一)表格 合并单元格(少用) (合并列) 1.先选中要合并的2个或多个单元格,然后点击以下图标 代码:

  2.设 ...

Darwin Streaming Server 安装流程

Darwin StreamingServer 安装流程 Darwin StreamingServer 支持开放源代码和基于标准的实时传输协议/实时流协议(RTP/ RTSP).MPEG-4 和MP3 ...

[译]Ocelot - Request Aggregation

原文 Aggregate ReRoutes用来组合多个ReRoutes,将它们的响应结果映射到一个响应中返回给客户端. 为了使用Aggregate ReRoutes,你必须像下面的ocelot.jso ...

u盘安装centos7.6 最新版本

1,可以按照网上的教程,制作u盘启动 2,然后将u盘插入主机,最重要的是这一步,网上的说法基本上适用这个版本 进入到这个界面: 然后选择Install Centos 7,然后按e键,tab是不管用的 ...

【rabbitmq】rabbitmq集群环境搭建

安装rabbitmq-server 总共有3台虚拟机,都安装有rabbitmq服务,安装过程可参考: [rabbitmq]Centos7 下安装rabbitmq 创建用户和vhost 说明: 此步骤不 ...

SqlServer跨集群升级

SqlServer跨集群升级 1.新Server的IP要和旧的在同一网段. 2.安装SQL SERVER(注意:排序要和以前的一样,更改TempDB位置) 3.开启防火墙,并打开1433和5022端口 ...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值