欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

自己写的代码实现Session

程序员文章站 2022-03-21 19:31:48
package com.zq.web.context.windows; import java.util.HashMap;import java.util.Map; import org.apache.log4j.Logger; import com.zq.utils.DateUtils;impor ......

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;
}

}