package org.voovan.http.server; import org.voovan.http.server.context.WebServerConfig; import java.util.Map; import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; /** * WebServer session 类 * * @author helyho * * Voovan Framework. * WebSite: https://github.com/helyho/Voovan * Licence: Apache v2 License */ public class HttpSession { private Map<String,Object> attributes; private String id ; private int maxInactiveInterval; private long lastTimeillis; private SessionManager sessionManager; /** * 构造函数 * * @param config WEB服务配置对象 * @param sessionManager Session管理器 */ public HttpSession(WebServerConfig config, SessionManager sessionManager){ attributes = new ConcurrentHashMap<String, Object>(); //生成一个随机的 ID 用作唯一标识 this.id = UUID.randomUUID().toString().toUpperCase().replaceAll("-", ""); lastTimeillis = System.currentTimeMillis(); int sessionTimeout = config.getSessionTimeout(); this.maxInactiveInterval = sessionTimeout*60*1000; this.sessionManager = sessionManager; } /** * 刷新 Session 的超时时间 * * @return HTTP-Session 对象 */ public HttpSession refresh(){ lastTimeillis = System.currentTimeMillis(); return this; } /** * 获取当前 Session 属性 * @param name 属性名 * @return 属性值 */ public Object getAttribute(String name) { return attributes.get(name); } /** * 判断当前 Session 属性是否存在 * @param name 属性名 * @return true: 存在, false: 不存在 */ public boolean containAttribute(String name) { return attributes.containsKey(name); } /** * 设置当前 Session 属性 * @param name 属性名 * @param value 属性值 */ public void setAttribute(String name,Object value) { attributes.put(name, value); } /** * 删除当前 Session 属性 * @param name 属性名 */ public void removeAttribute(String name) { attributes.remove(name); } /** * 获取 Session 管理器 * @return Session 管理器 */ protected SessionManager getSessionManager() { return sessionManager; } /** * 设置Session 管理器 * @param sessionManager Session 管理器 */ protected void setSessionManager(SessionManager sessionManager) { this.sessionManager = sessionManager; } public void removeFromSessionManager(){ sessionManager.removeSession(this); } /** * 获取 Session ID * * @return Session ID */ public String getId() { return id; } /** * 获取最大活动时间 * * @return 最大活动时间 */ public int getMaxInactiveInterval() { return maxInactiveInterval; } /** * 设置最大活动时间 * * @param maxInactiveInterval 最大活动时间 */ public void setMaxInactiveInterval(int maxInactiveInterval) { this.maxInactiveInterval = maxInactiveInterval; } /** * 当前 Session 是否失效 * * @return true: 失效,false: 有效 */ public boolean isInvalid(){ int intervalTime = (int)(System.currentTimeMillis() - lastTimeillis); return intervalTime > maxInactiveInterval; } }