自定义session扫描器精确控制session销毁时间--学习笔记

author author     2022-11-04     807

关键词:

package cn.xijie.listener; import java.util.ArrayList; import java.util.Collections; import java.util.Date; import java.util.List; import java.util.ListIterator; import java.util.Timer; import java.util.TimerTask; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import javax.servlet.http.HttpSession; import javax.servlet.http.HttpSessionEvent; import javax.servlet.http.HttpSessionListener; //HttpSession扫描器 public class SessionScanner implements ServletContextListener,HttpSessionListener private List<HttpSession> sessionList = new ArrayList<HttpSession>(); //线程安全 private Timer timer = new Timer(); public SessionScanner() //将线程不安全的List转换成线程安全的List sessionList = Collections.synchronizedList(sessionList); //ServletContext产生 public void contextInitialized(ServletContextEvent sce) timer.schedule(new SessionTask(this.sessionList),0,1*1000); //HttpSession产生 public void sessionCreated(HttpSessionEvent se) //取得客户端产生的HttpSession HttpSession session = se.getSession(); System.out.println("HttpSession产生" + session.hashCode() + new Date().toLocaleString()); synchronized (sessionList) //将HttpSession加入到容器中 this.sessionList.add(session); //ServletContext销毁 public void contextDestroyed(ServletContextEvent sce) timer.cancel(); //HttpSession销毁 public void sessionDestroyed(HttpSessionEvent se) HttpSession session = se.getSession(); System.out.println("HttpSession销毁" + session.hashCode() + new Date().toLocaleString()); //任务类 class SessionTask extends TimerTask private List<HttpSession> sessionList; public SessionTask(List<HttpSession> sessionList) this.sessionList = sessionList; public void run() System.out.println("run()"); //迭代集合 //Iterator<HttpSession> it = sessionList.iterator(); synchronized (sessionList) ListIterator<HttpSession> it = sessionList.listIterator(); while (it.hasNext()) HttpSession session = it.next(); //判段HttpSession是否1分钟未被使用 int middle = (int) ((System.currentTimeMillis() - session .getLastAccessedTime()) / 1000); if (middle > 60) //将该HttpSession销毁 session.invalidate(); //从集合中删除该HttpSession ....有可能出现并发问题 //sessionList.remove(session); it.remove();

run()
HttpSession产生6027721002018-4-20 14:47:32
run()
)
run()
run()
run()
HttpSession销毁6027721002018-4-20 14:48:45
run()

监听器应用统计网站人数自定义session扫描器踢人小案例

从第一篇已经讲解过了监听器的基本概念,以及Servlet各种的监听器。这篇博文主要讲解的是监听器的应用。统计网站在线人数分析我们在网站中一般使用Session来标识某用户是否登陆了,如果登陆了,就在Session域中保存相对应的... 查看详情

flask自定义session

根据内置session原理可以进行session的定制:#!/usr/bin/envpython#-*-coding:utf-8-*-importuuidimportjsonfromflask.sessionsimportSessionInterfacefromflask.sessionsimportSessionMixinfromitsdangerousimportSigner,BadSigna 查看详情

flask中的session以及自定义实现session机制(代码片段)

Flask中的session以及自定义实现session机制session是基于cookie实现,保存在服务端的键值对(形式为随机字符串:‘xxxxxx’),同时在浏览器中的cookie中也对应一相同的随机字符串,用来再次请求的时候验证1flask中session的基本概念flask... 查看详情

flask自定义session(代码片段)

根据内置session原理可以进行session的定制:#!/usr/bin/envpython#-*-coding:utf-8-*-importuuidimportjsonfromflask.sessionsimportSessionInterfacefromflask.sessionsimportSessionMixinfromitsdangerousimportSigner,BadSigna 查看详情

自定义session

#!/usr/bin/envpythonimporttornado.ioloopimporttornado.webcontainer={}classSession:def__init__(self,handler):self.handler=handlerself.random_str=Nonedef__set_random_str(self):importhashlibimporttimeobj 查看详情

pythonrequestsheaders自定义问题

...义排序,可:headers=‘Host’:‘’,‘User-Agent’:‘’session=requests.session()session.headers.clear()session.headers.update(headers),此session所带的headers即完全与我们自定义的相同了 查看详情

Laravel 在用户级别自定义 session.lifetime

】Laravel在用户级别自定义session.lifetime【英文标题】:Laravelcustomizedsession.lifetimeatuserlevel【发布时间】:2017-12-2801:42:07【问题描述】:我正在其中一个中间件(用于LaravelWeb应用程序)中覆盖session.timeout值,但它似乎不会影响会话... 查看详情

spring中自定义session管理,springsession源码解析(代码片段)

...a;SpringBoot学习大纲,可以留言自己想了解的技术点1、session是什么?1>session在哪里?2>服务器怎么知道每次说话的是哪个session3>session的使用2、session的数据结构3、tomcat中的session3.1session的创建时机和同步3.2session... 查看详情

flask中的session,自定义实现session机制,和flask-session组件(代码片段)

session是基于cookie实现,保存在服务端的键值对(形式为随机字符串:‘xxxxxx’),同时在浏览器中的cookie中也对应一相同的随机字符串,用来再次请求的时候验证;注意:Flask中的session是存在浏览器中默认key是session(加密的... 查看详情

粗颗粒度权限控制(使用过滤器完成)

分析:精确到Session的权限控制(判断Session是否存在)使用过滤器完成粗颗粒的权限控制,如果Session不存在就跳转到首页,如果存在可以通过URL链接访问到对应的操作。第一步:定义一个过滤器:1publicclassSystemFilterimplementsFilter{2... 查看详情

PassportJS - 自定义回调并将 Session 设置为 false

】PassportJS-自定义回调并将Session设置为false【英文标题】:PassportJS-CustomCallbackandsetSessiontofalse【发布时间】:2014-09-3000:41:26【问题描述】:是否可以使用自定义回调并禁用会话?在文档中,它显示了如何禁用会话和自定义回调,... 查看详情

自定义 session_end 重定向实现?

】自定义session_end重定向实现?【英文标题】:customsession_endredirectimplementation?【发布时间】:2017-05-0422:08:33【问题描述】:我正在使用MVC应用程序。我有一个要求,当会话结束时,应用程序应该重定向到主页。我需要通用地实现... 查看详情

thinkphp3验证码文件上传缩略图分页(自定义工具类session和cookie)

验证码TP框架中自带了验证码类位置:Think/verify.class.php在LoginController控制器中创建生存验证码的方法login.html登陆模板中在LoginController控制器中判断验证码是否正确并且判断登陆是否成功文件上传用到的知识点: 1、文件上传... 查看详情

tornado之自定义session

面向对象基础面向对象中通过索引的方式访问对象,需要内部实现__getitem__、__delitem__、__setitem__方法#!/usr/bin/envpython#-*-coding:utf-8-*-classFoo(object):def__getitem__(self,key):print‘__getitem__‘,keydef__setitem__(self,key,value): 查看详情

在 iOS 上自定义 session_start 事件参数

】在iOS上自定义session_start事件参数【英文标题】:Customizesession_starteventparametersoniOS【发布时间】:2018-06-0815:31:19【问题描述】:我想更改iOS上的session_start事件参数(最短会话持续时间和会话超时持续时间)(如果可能,请使用S... 查看详情

自定义session,cookie(代码片段)

第一种情况:没有设置缓存:执行相对应的setitem等方法进行,保存到字典里面cookies_dic=print(cookies_dic)classSession():def__init__(self,handler):self.user_id=Noneself.handler=handler###这个handler是传过来的requetys对象,注明一下,这个handler是request对 查看详情

Opsworks 自定义厨师食谱上的 Codeigniter ci_sessions

】Opsworks自定义厨师食谱上的Codeigniterci_sessions【英文标题】:Codeigniterci_sessionsonOpsworksCustomChefRecipies【发布时间】:2015-11-2401:35:29【问题描述】:我是Codeigniter开发人员,是AWSOpsWorks的新手。我已经成功创建了一个来自AWS-gettingstar... 查看详情

struts2的登录验证和session控制

...进拦截器Action看一下是否符合要求,比如说是否有合法的session保存。下面是各种配置文件:1.某package中的interceptors配置,这里没用 interceptor-stack,因为只需要一层过滤。<int 查看详情