自己写的代码实现Session
package com.zq.web.context.windows;
import java.util.HashMap;
import java.util.Map;
import org.apache.log4j.Logger;
import com.zq.utils.DateUtils;
import com.zq.utils.string.StringUtils;
/**
*
* windows桌面应用会话管理容器SessionContainer
*
* Created by MyEclipse. Author: ChenBin E-mail: chenbin_2008@126.com Date:
* 2016年12月4日 Time: 上午9:53:03
*/
public class SC {
private static Logger log = Logger.getLogger(SC.class);
/**
* 超时毫秒数,如果容器中的session对象超过该时间未更新则会被清除掉
*/
private static long timeOut = 3600000L;
private static Map<String, Session> container = new HashMap<String, Session>();
// 私有化容器构造函数
private SC() {
}
/**
* Description : 通过sessionId获取对应的session实体
*
* @author : ChenBin
* @date : 2016年12月13日 下午2:33:24
*/
public static Session get(String sessionId) {
if (!StringUtils.compareTrim(sessionId))
return null;
Session session = container.get(sessionId);
if (session != null)
session.updateLastTime();
return session;
}
/**
* Description : 往会话容器中新增会话实体
*
* @author : ChenBin
* @date : 2016年12月4日 上午10:47:15
*/
public static Session create() {
Session session = Session.me();
SC.put(session);
return session;
}
public static Session put(Session sen) {
if (sen == null)
return sen;
if (!StringUtils.compareTrim(sen.getSessionId())) {
log.debug("sessionid不能为空!");
return sen;
}
return container.put(sen.getSessionId(), sen);
}
/**
* Description : 移除指定的Session对象
*
* @author : ChenBin
* @date : 2016年12月4日 上午10:06:40
*/
public static void remove(Session sen) {
if (sen != null)
SC.remove(sen.getSessionId());
}
/**
* Description : 通过sessionId移除指定的sessionId
*
* @author : ChenBin (E-Mail:chenbin_2008@126.com)
* @date : 2017年3月9日 下午4:30:12
*/
public static void remove(String sessionId) {
if (StringUtils.compareTrim(sessionId))
container.remove(sessionId);
}
public static long getTimeOut() {
return timeOut;
}
public static void setTimeOut(long timeOut) {
SC.timeOut = timeOut;
}
/**
* Description : 处理session容器中的session对象,如果已经过期则sessionId对应的会话对象将会被销毁
*
* @author : ChenBin (E-Mail:chenbin_2008@126.com)
* @date : 2017年3月9日 下午5:24:05
*/
public static void handleTimeOutSession(String sessionId) {
Session sen = SC.get(sessionId);
if (sen == null)
return;
if (DateUtils.timeDifference(sen.getLastUpdateTime()) > SC.timeOut)
SC.remove(sessionId);
}
}
/*************************************************以上为工具方法*********************************************/
package com.zq.web.context.windows;
import java.util.HashMap;
import java.util.Map;
import com.zq.utils.DateUtils;
import com.zq.utils.system.WindowsAppUtils;
/**
*
* 简单自定义会话对象
*
* Created by MyEclipse. Author: ChenBin E-mail: chenbin_2008@126.com Date:
* 2016年12月4日 Time: 上午9:57:12
*/
public class Session {
/**
* 会话id
*/
private String sessionId;
/**
* 创建时间毫秒数
*/
private long createTime;
/**
* 最后更新时间
*/
private long lastUpdateTime;
/**
* 在会话对象中保存的内容
*/
private Map<Object, Object> sessionContent;
/**
* 会话类型:windows-10;浏览器-20;Android-30;IOS-40;
*/
private int sessionType;
/**
* 会话是否已失效(失效-true;有效-false)
*/
private boolean invalid;
/**
* Description :定义构造函数,必须传入sessionId
*
* @author : ChenBin
* @date : 2016年12月4日 上午10:23:05
*/
private Session(String sessionId) {
this.sessionId = sessionId;
this.createTime = DateUtils.getTimeMillis();
this.lastUpdateTime = createTime;
this.sessionContent = new HashMap<Object, Object>();
}
/**
* Description : 通过key获取指定参数
*
* @author : ChenBin
* @date : 2016年12月4日 上午10:38:16
*/
public Object getAttribute(Object key) {
updateLastTime();
return this.sessionContent.get(key);
}
/**
* Description : 往会话中保存参数
*
* @author : ChenBin
* @date : 2016年12月4日 上午10:39:26
*/
public void setAttribute(Object k, Object v) {
updateLastTime();
this.sessionContent.put(k, v);
}
/**
* Description : 获取Session对象的方法
*
* @author : ChenBin
* @date : 2016年12月4日 上午10:24:17
*/
public static Session me() {
return new Session(WindowsAppUtils.sessionIDGenerator());
}
/**
* Description : 更新最后更新时间戳
*
* @author : ChenBin
* @date : 2016年12月4日 上午10:43:32
*/
public void updateLastTime() {
this.lastUpdateTime = DateUtils.getTimeMillis();
}
public String getSessionId() {
return sessionId;
}
public long getLastUpdateTime() {
return lastUpdateTime;
}
public int getSessionType() {
return sessionType;
}
public void setSessionType(int sessionType) {
this.sessionType = sessionType;
}
public boolean isInvalid() {
return invalid;
}
public void setInvalid(boolean invalid) {
this.invalid = invalid;
}
}
自己写的代码实现Session的更多相关文章
- .net学习之Session、Cookie、手写Ajax代码以及请求流程
1.IIS 7 以上版本集成了两种模式,一种是经典模式,一种是集成模式(直接将asp.net框架集成到IIS中) 2.浏览器和服务器端通过什么技术来实现的?Socket(套接字),通信的语法是HTTP ...
- jQuery之父:每天都写点代码
去年秋天,我的“兼职编程项目”遇到了一些问题:要不是从 Khan Academy 的项目里挪出时间来的话,我根本没办法将不理想的进度弥补上. 这些项目遇到了一些严重的问题.之前的工作我主要是在周末,有 ...
- Wix#可以直接写C#代码来生成Wix的MSI安装文
博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:Wix#可以直接写C#代码来生成Wix的MSI安装文.
- 关于 OnCloseQuery: 顺序、不能关机等(所有的windows的广播消息都是逐窗口传递的)——如果一个窗体的OnCloseQuery事件中如果写了代码那么WM_QUERYENDSESSION消息就传不过去了msg.result会返回0,关机事件也就停止了
系统关闭窗体的事件顺序为: OnCloseQuery ----> OnClose ----> OnDestroy 下面的代码说明问题: unit Unit3; interface uses ...
- Lombok : 让你写 Java代码像C#一样爽
前言 我曾经是一名 .Net 开发,如今的我是一名 Java 开发者.在我享受着 Java 成熟的生态时,我常常怀念 c# 简洁的语法:自动属性.类型推断.自动初始化器 .... 鱼,我所欲也,熊掌亦 ...
- 不写一行代码,利用常用工具和软件批量下载URL资源
有时候会遇到这种情况:想从某个网站下载一批东西,目标URL是比较规整的,而且结构都一样(仅某些字段不同).但又懒得开IDE专门写个脚本去弄,今天就和大家分享一下,如何利用手边常用的软件和工具,不用写一 ...
- 开箱即用(out-of-box)的Redis序列号生成器,不用再写任何代码,你值得拥有
先看整体效果 把简单的东西“傻瓜化”是软件开发追求的目标之一.请看下图: 左边是在 application.yml 里配置了3个生成器,右边可以直接注入到代码中使用,注意,不用写任何代码.这酸爽. ...
- golang写业务代码,用全局函数还是成员函数
在golang中,函数划分为全局函数和成员函数,在使用的时候,有种情况,会产生一些疑惑的,就是在写业务代码的时候,使用全局函数好像会比较方便,一般业务代码,都不会复用,都是针对特定的业务进行编程,要复 ...
- 如何写 go 代码 (How to Write Go Code 翻译)
目录 1. 写在前面的话 2. 介绍 3. 代码组织 3.1. 工作区 3.2. GOPATH 环境变量 3.3. Package 路径 3.4. 第一个 GO 程序 3.5. 第一个 GO 库 3. ...
随机推荐
- Spring Boot Async异步执行
异步调用就是不用等待结果的返回就执行后面的逻辑,同步调用则需要等带结果再执行后面的逻辑. 通常我们使用异步操作都会去创建一个线程执行一段逻辑,然后把这个线程丢到线程池中去执行,代码如下: Execut ...
- jquery 事件监听方法
一.事件监听方法 mouseover() 鼠标移入事件方法 mouseout() 鼠标移出事件方法 mouseenter() 鼠标移入事件方法 mouseleave() 鼠标移出事件方法 ...
- JavaScript JSON AJAX 同源策略 跨域请求
网页和Ajax和跨域的关系 1 Ajax使网页可以动态地.异步地的与服务器进行数据交互,可以让网页局部地与服务器进行数据交互 2 Ajax强调的是异步,但是会碰到跨域的问题. 3 而有很多技术可以解决 ...
- 用虚拟信用卡注册Google Play开发者账号
本文首发于http://www.abcdsxg.cn/free/net/562 虚拟信用卡 首先介绍一下虚拟信用卡(Virtual Credit Card),顾名思义,虚拟就是没有实体卡,一般都是在提 ...
- xlwings: Write Excel macro using python instead of VBA
i want to write Excel macros to deal with the data, but i am not familiar with VBA language. so i de ...
- python shopping incomplete code
#shopping code#shopping.py#导入登录模块import login# shop car beginningsalary = input("请输入工资:\t" ...
- windows线程时间打印
https://blog.csdn.net/xingcen/article/details/70084029
- QT样式
最近在写QT的UI 分享一个助手网页 http://doc.qt.io/qt-4.8/stylesheet-examples.html
- MYSQL 升序排序但值为0的排最后
转载 http://blog.csdn.net/looksun/article/details/51445205 如一张表的数据如下: 需要根据gz列的值进行升序排序,但值为0的排在最后面,即最终结果 ...
- PTA练习题之7-1 矩阵转置(10 分)
7-1 矩阵转置(10 分) 将一个3×3矩阵转置(即行和列互换). 输入格式: 在一行中输入9个小于100的整数,其间各以一个空格间隔. 输出格式: 输出3行3列的二维数组,每个数据输出占4列. 输 ...