tft每日頭條

 > 生活

 > session的4種狀态

session的4種狀态

生活 更新时间:2024-06-30 16:30:16

session的4種狀态? 做服務端開發針對session相關的操作很常見,同時通過spring-session也可以解決分布式下session共享的需求,加入相關配置就可以了,今天就結合spring了解下常見的session操作,總結了一個session工具類,喜歡的可以直接拿去用,不清楚怎麼用的可以評論 /** * 登錄用戶 Session管理工具類 * */ public class SessionUtil implements BeanFactoryAware { private static final Logger log = LoggerFactory.getLogger(SessionUtil.class); private static StringRedisTemplate redis; private static BoundHashOperations<String, String, String> ou; /** 獲取用戶ID */ public static Integer getUserId() { //spring-session -- RedisOperationsSessionRepository 從redis中取獲取 return (Integer) WebUtils.getSessionAttribute(getRequest(), Const.SESSION_USER_ID); } /** 獲取用戶登錄名 */ public static String getLoginName() { return (String) WebUtils.getSessionAttribute(getRequest(), Const.SESSION_USER_LOGINNAME); } /** 獲取用戶真實姓名 */ public static String getRealName() { return (String) WebUtils.getSessionAttribute(getRequest(), Const.SESSION_USER_REALNAME); } /** 獲取用戶手機号 */ public static String getCellPhone() { return (String) WebUtils.getSessionAttribute(getRequest(), Const.SESSION_USER_CELLPHONE); } /** 設置用戶 */ /** * 設置session屬性,會同步到redis-session中 * @param user */ public static void setUser(User user) { if (user == null) { log.error("setUser failure,because the user is null."); return; } WebUtils.setSessionAttribute(getRequest(), Const.SESSION_USER_ID, user.getId()); WebUtils.setSessionAttribute(getRequest(), Const.SESSION_USER_LOGINNAME, user.getLoginName()); WebUtils.setSessionAttribute(getRequest(), Const.SESSION_USER_REALNAME, user.getRealName()); WebUtils.setSessionAttribute(getRequest(), Const.SESSION_USER_CELLPHONE, user.getCellPhone()); addToMap(user); } /** 設置當前session失效 */ public static void invalidate() { getRequest().getSession().invalidate(); } /** * 獲取HttpServletRequest * @return */ public static HttpServletRequest getRequest() { return ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); } /** 判斷用戶是否在線 */ public static boolean isOnlineUser(Integer userId) { return ou.hasKey(userId.toString()); } /** * 記錄用戶登錄後對應userId和SessionId的Map關系 * 針對重複登錄,在sessionId中追加重複登錄的sId * @param user */ private static void addToMap(User user) { String uId = user.getId().toString(); String sId = getRequest().getSession().getId(); Boolean hasKey = ou.hasKey(uId); if (hasKey) { String sids = ou.get(uId); ou.put(uId, sids sId); } else { ou.put(uId, sId); } } /** 判斷sessionId是否過期 */ public static boolean isExpiredSessionId(String sessionId) { return !redis.hasKey(Const.SPRING_SESSION_EXPIRE_PREFFIX sessionId); } @Override public void setBeanFactory(BeanFactory beanFactory) throws BeansException { redis = beanFactory.getBean(StringRedisTemplate.class); ou = redis.boundHashOps(Const.MAP_ONLINE_USER_SESSION_IDS); } } ,我來為大家講解一下關于session的4種狀态?跟着小編一起來看一看吧!

session的4種狀态(session管理對session的基本操作)1

session的4種狀态

做服務端開發針對session相關的操作很常見,同時通過spring-session也可以解決分布式下session共享的需求,加入相關配置就可以了,今天就結合spring了解下常見的session操作,總結了一個session工具類,喜歡的可以直接拿去用,不清楚怎麼用的可以評論。 /** * 登錄用戶 Session管理工具類 * */ public class SessionUtil implements BeanFactoryAware { private static final Logger log = LoggerFactory.getLogger(SessionUtil.class); private static StringRedisTemplate redis; private static BoundHashOperations<String, String, String> ou; /** 獲取用戶ID */ public static Integer getUserId() { //spring-session -- RedisOperationsSessionRepository 從redis中取獲取 return (Integer) WebUtils.getSessionAttribute(getRequest(), Const.SESSION_USER_ID); } /** 獲取用戶登錄名 */ public static String getLoginName() { return (String) WebUtils.getSessionAttribute(getRequest(), Const.SESSION_USER_LOGINNAME); } /** 獲取用戶真實姓名 */ public static String getRealName() { return (String) WebUtils.getSessionAttribute(getRequest(), Const.SESSION_USER_REALNAME); } /** 獲取用戶手機号 */ public static String getCellPhone() { return (String) WebUtils.getSessionAttribute(getRequest(), Const.SESSION_USER_CELLPHONE); } /** 設置用戶 */ /** * 設置session屬性,會同步到redis-session中 * @param user */ public static void setUser(User user) { if (user == null) { log.error("setUser failure,because the user is null."); return; } WebUtils.setSessionAttribute(getRequest(), Const.SESSION_USER_ID, user.getId()); WebUtils.setSessionAttribute(getRequest(), Const.SESSION_USER_LOGINNAME, user.getLoginName()); WebUtils.setSessionAttribute(getRequest(), Const.SESSION_USER_REALNAME, user.getRealName()); WebUtils.setSessionAttribute(getRequest(), Const.SESSION_USER_CELLPHONE, user.getCellPhone()); addToMap(user); } /** 設置當前session失效 */ public static void invalidate() { getRequest().getSession().invalidate(); } /** * 獲取HttpServletRequest * @return */ public static HttpServletRequest getRequest() { return ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); } /** 判斷用戶是否在線 */ public static boolean isOnlineUser(Integer userId) { return ou.hasKey(userId.toString()); } /** * 記錄用戶登錄後對應userId和SessionId的Map關系 * 針對重複登錄,在sessionId中追加重複登錄的sId * @param user */ private static void addToMap(User user) { String uId = user.getId().toString(); String sId = getRequest().getSession().getId(); Boolean hasKey = ou.hasKey(uId); if (hasKey) { String sids = ou.get(uId); ou.put(uId, sids sId); } else { ou.put(uId, sId); } } /** 判斷sessionId是否過期 */ public static boolean isExpiredSessionId(String sessionId) { return !redis.hasKey(Const.SPRING_SESSION_EXPIRE_PREFFIX sessionId); } @Override public void setBeanFactory(BeanFactory beanFactory) throws BeansException { redis = beanFactory.getBean(StringRedisTemplate.class); ou = redis.boundHashOps(Const.MAP_ONLINE_USER_SESSION_IDS); } }

歡迎大家關注,持續更新!

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关生活资讯推荐

热门生活资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved