当前位置:   article > 正文

spring boot之session的创建,销毁,超时,监听等等小结_springboot 创建session

springboot 创建session

一、 session简介

1. 服务器可以为每个用户浏览器创建一个会话对象(session对象),一个浏览器只能产生一个session,当新建一个窗口访问服务器时,还是原来的那个session。session中默认保存的是当前用户的信息。因此,在需要保存其他用户数据时,我们可以自己给session添加属性。session(会话)可以看为是一种标识,通过带session的请求,可以让服务器知道是谁在请求数据。

二、 session与cookie的区别和联系

1、 session是由服务器创建的,并保存在服务器上的。在session创建好之后,会把sessionId放在cookie中返回(response)给客户端。返回的代码应该是这样子的。返回的cookie是保存在客户端的。

  1. String sessionId = session.getId();
  2. Cookie cookie = new Cookie("JSESSIONID", sessionId);
  3. cookie.setPath(request.getContextPath());
  4. response.addCookie(cookie);
2、 以后的每次HTTP请求都会带着sessionId,来跟踪用户的整个会话。

3、 session的过期和超时与cookie的过期没有什么联系,都是可以分别进行设置的。但是当session或cookie中任意一方过期,那么用户就需要重新登录了。

三、 session相关

1、 session的创建
  1. @GetMapping"demo"
  2. public void demo(HttpServletRequest request){
  3. HttpSession sessoin=request.getSession();//这就是session的创建
  4. session.setAttribute("username","TOM");//给session添加属性属性name: username,属性 value:TOM
  5. session.setAttribute("password","tommmm");//添加属性 name: password; value: tommmm
  6. System.out.println(session.geiId);
  7. }
其中HttpSession session=request.getSession(true); //true表示如果这个HTTP请求中,有session,那么可以直接通过getSession获取当前的session,如果当前的请求中没有session,则会自动新建一个session
       HttpSession session=request.getSession(false);//false表示只能获取当前请求中的session,如果没有也不能自动创建。

2、 session的 获取属性
  1. session.getAttribute("username");
  2. session.getAttribute("password");
3、 session,cookies的超时设置
 1 在.yml里面或.xml配置文件里面


 2 在创建session时

 session.setMaxInactiveInterval(30*60);//以秒为单位,即在没有活动30分钟后,session将失效

四、 session的监听

监听session主要有三个接口,用这两个就够用了。

实现接口HttpSessionListener下的sessionCreated();//当session创建时。

和sessionDestroyed();//当session被销毁或超时时。

实现接口HttpSessionAttributeListener下的 attributeAdded() //当给session添加属性时

attributeRemoved();和attributeReplaced();

以下是简单的实现了在线人数统计的功能。

如果要更深刻的了解session的工作机制,多执行几次session的监听代码(可以参考一下的代码)。

  1. @WebListener
  2. public class SessionListener implements HttpSessionListener, HttpSessionAttributeListener{
  3. public static final Logger logger= LoggerFactory.getLogger(SessionListener.class);
  4. @Override
  5. public void attributeAdded(HttpSessionBindingEvent httpSessionBindingEvent) {
  6. logger.info("--attributeAdded--");
  7. HttpSession session=httpSessionBindingEvent.getSession();
  8. logger.info("key----:"+httpSessionBindingEvent.getName());
  9. logger.info("value---:"+httpSessionBindingEvent.getValue());
  10. }
  11. @Override
  12. public void attributeRemoved(HttpSessionBindingEvent httpSessionBindingEvent) {
  13. logger.info("--attributeRemoved--");
  14. }
  15. @Override
  16. public void attributeReplaced(HttpSessionBindingEvent httpSessionBindingEvent) {
  17. logger.info("--attributeReplaced--");
  18. }
  19. @Override
  20. public void sessionCreated(HttpSessionEvent event) {
  21. logger.info("---sessionCreated----");
  22. HttpSession session = event.getSession();
  23. ServletContext application = session.getServletContext();
  24. // 在application范围由一个HashSet集保存所有的session
  25. HashSet sessions = (HashSet) application.getAttribute("sessions");
  26. if (sessions == null) {
  27. sessions = new HashSet();
  28. application.setAttribute("sessions", sessions);
  29. }
  30. // 新创建的session均添加到HashSet集中
  31. sessions.add(session);
  32. // 可以在别处从application范围中取出sessions集合
  33. // 然后使用sessions.size()获取当前活动的session数,即为“在线人数”
  34. }
  35. @Override
  36. public void sessionDestroyed(HttpSessionEvent event) throws ClassCastException {
  37. logger.info("---sessionDestroyed----");
  38. HttpSession session = event.getSession();
  39. logger.info("deletedSessionId: "+session.getId());
  40. System.out.println(session.getCreationTime());
  41. System.out.println(session.getLastAccessedTime());
  42. ServletContext application = session.getServletContext();
  43. HashSet sessions = (HashSet) application.getAttribute("sessions");
  44. // 销毁的session均从HashSet集中移除
  45. sessions.remove(session);
  46. }
  47. }







声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/368085
推荐阅读
相关标签
  

闽ICP备14008679号