Servlet(二) 会话管理

会话管理

由于HTTP的无状态性,默认情况下,服务器无法区分HTTP请求的是否是第一次请求


  • URL重写 将n个token(key=value)添加刀URL的查询字符串中

    • url?key1=value1&key2=value3...
    • 某些浏览器有url长度限制2000字符
    • 静态页面很难传值
    • url中的特殊符号需要特殊编码
    • 传递的信息是可见的
  • 隐藏域 仅仅在表单提交时有效

    • 没有在url中无需额外编码,且没有大小限制
    • 同样不适合多页面传值
  • Cookies 解决跨页面传递信息

    • 可自动在浏览器和web服务器交互

    • cookie作为HTTP header的一部分

    • cookie可手动设置有效时间

    • 缺点:用户可以禁用cookie

    • javax.servlet.http.Cookie接口

      Cookie cookie = new Cookie("cookieTest", "QCookie");
      cookie.setPath("/firstServlet.do");
      cookie.setMaxAge(60 * 60 * 24); 单位s
      response.addCookie(cookie);
      

    • 服务端可以获取浏览器请求时携带的cookie

      Cookie[] cookies = request.getCookies();
      String token = "";
      for (Cookie cookie : cookies) {
          switch(cookie.getName()){
              case "token":
                  token = cookie.getValue();
                  break;
              default:
                  break;
          }
      }
      
  • HttpSession 最通用,一个用户有且仅有一个HttpSession对象

    • 用户第一次访问服务器时被自动创建

    • 获取方法

       HttpSession getSession(boolean var1);
      
       HttpSession getSession();
      
       void setAttribute(String var1, Object var2);
      
    • session是存储在内存中的,可以存入任意实现Serializable接口的对象

      HttpSession session = request.getSession();
      session.setAttribute("seeee","session");
      System.out.println(session.getId());
      
    • session不会发送给客户端,但是servlet容器为每个session生成的唯一表示,会写入cookie中写给客户端

    • session默认过期时间30min,可以在部署描述符web.xml中配置<session-timeout>

posted @ 2018-11-12 19:39  拷贝程序员_厚厚北  阅读(199)  评论(0编辑  收藏  举报