zoukankan      html  css  js  c++  java
  • 自己写的代码实现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;
    }

    }

  • 相关阅读:
    webpack + vue 打包生成公共配置文件(域名) 方便动态修改
    前端实用工具大集合
    Javascript高级程序设计--读书笔记之理解原型对象
    Javascript高级程序设计--读书笔记之面向对象(二)
    Javascript高级程序设计--读书笔记之面向对象(一)
    Javascript高级程序设计--读书笔记之Array类型
    javascript 中的函数
    CF1037H Security (SAM+二维偏序)
    搜索和组合数学P1246 编码
    模拟画图题P1185 绘制二叉树
  • 原文地址:https://www.cnblogs.com/rey888/p/8431074.html
Copyright © 2011-2022 走看看