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

    }

  • 相关阅读:
    Java实现 蓝桥杯VIP 算法提高 阮小二买彩票
    Java实现 蓝桥杯VIP 算法提高 传染病控制
    Java实现 蓝桥杯VIP 算法提高 传染病控制
    Java实现 蓝桥杯VIP 算法提高 传染病控制
    Java实现 蓝桥杯VIP 算法提高 传染病控制
    Java实现 蓝桥杯VIP 算法提高 传染病控制
    Java实现 蓝桥杯VIP 算法提高 企业奖金发放
    Java实现 蓝桥杯VIP 算法提高 企业奖金发放
    让程序后台隐藏运行
    只要你喜欢,并且可以养家糊口,就是好的
  • 原文地址:https://www.cnblogs.com/rey888/p/8431074.html
Copyright © 2011-2022 走看看