package com.redant.core.session; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelId; import java.util.HashMap; import java.util.Map; /** * HttpSession * @author houyi.wh * @date 2017/11/6 */ public class HttpSession { /** * 会话id */ private ChannelId id; /** * 会话保存的ChannelHandlerContext */ private ChannelHandlerContext context; /** * 创建时间 */ private Long createTime; /** * 过期时间 * 每次请求时都更新过期时间 */ private Long expireTime; /** * Session中存储的数据 */ private Map<String,Object> sessionMap; private void assertSessionMapNotNull(){ if(sessionMap ==null){ sessionMap = new HashMap<String,Object>(); } } private HttpSession(){ } //===================================== public HttpSession(ChannelHandlerContext context){ this(context.channel().id(),context); } public HttpSession(ChannelId id,ChannelHandlerContext context){ this(id,context,System.currentTimeMillis()); } public HttpSession(ChannelId id,ChannelHandlerContext context,Long createTime){ this(id,context,createTime,createTime + SessionConfig.instance().sessionTimeOut()); } public HttpSession(ChannelId id,ChannelHandlerContext context,Long createTime,Long expireTime){ this.id = id; this.context = context; this.createTime = createTime; this.expireTime = expireTime; assertSessionMapNotNull(); } public ChannelId getId() { return id; } public void setId(ChannelId id) { this.id = id; } public ChannelHandlerContext getContext() { return context; } public void setContext(ChannelHandlerContext context) { this.context = context; } public Long getCreateTime() { return createTime; } public void setCreateTime(Long createTime) { this.createTime = createTime; } public Long getExpireTime() { return expireTime; } public void setExpireTime(Long expireTime) { this.expireTime = expireTime; } /** * 是否过期 * @return */ public boolean isExpire(){ return this.expireTime>=System.currentTimeMillis(); } /** * 设置attribute * @param key * @param val */ public void setAttribute(String key,Object val){ sessionMap.put(key,val); } /** * 获取key的值 * @param key */ public Object getAttribute(String key){ return sessionMap.get(key); } /** * 是否存在key * @param key */ public boolean containsAttribute(String key){ return sessionMap.containsKey(key); } }