java session代码_自己写的代码实现Session

戎俊
2023-12-01

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 container = new HashMap();

// 私有化容器构造函数

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 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();

}

/**

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

}

}

希望与广大网友互动??

点此进行留言吧!

 类似资料: