zoukankan      html  css  js  c++  java
  • JavaWeb——会话技术Cookie & Session

    会话技术

    因为Http协议是无状态的,也就是说每个客户访问服务器端资源时,服务器并不知道该客户端是谁,所以需要会话技术识别客户端的状态。会话技术是帮助服务器记住客户端状态(区分不同的客户端)

    从打开一个浏览器访问某个站点,到关闭这个浏览器的整个过程,成为一次会话。会话技术就是记录这次会话中客户端的状态与数据的。
    会话技术分为Cookie和Session:

    • Cookie:数据存储在客户端本地,减少服务器端的存储的压力,安全性不好,客户端 可以清除cookie
    • Session:将数据存储到服务器端,安全性相对好,增加服务器的压力

    一、Cookie技术

    Cookie技术是将用户的数据存储到客户端的技术。

    1、设置cookie

    Cookie cookie = new Cookie("username","x5456");     // 创建cookie对象
    
    cookie.setMaxAge(10*60);     // 设置cookie有效期为10min,默认是到浏览器关闭时,设置为0清除cookie
    
    cookie.setPath("/WEB16");   // 设置cookie携带路径,默认会将整个web应用(/WEB16)戴上cookie
    
    response.addCookie(cookie);     // 将cookie中存储的信息发送到客户端
    

    注意:如果不设置持久化时间,cookie会存储在浏览器的内存中,浏览器关闭 cookie信息销毁(会话级别的cookie),如果设置持久化时间,cookie信息会 被持久化到浏览器的磁盘文件里

    cookie只能存除中文的字符串

    2、获取指定的cookie

    cookie信息是以请求头的方式发送到服务器端的

    Cookie[] cookies = request.getCookies();    // 获取cookie列表
    
    for(Cookie cookie : cookies){     // 遍历Cookie数组,通过Cookie的名称获得我们想要的Cookie
        if(cookie.getName().equals("username")){
            String cookieValue = cookie.getValue();
            System.out.println(cookieValue);
        }
    }
    

    3、清除cookie

    Cookie c = new Cookie("name","");   // key为要清除的cookie
    
    c.setMaxAge(0);
    
    c.setPath("/WEB16");    // 路径要和之前一样
    
    response.addCookie(c);

    二、Session技术

    Session技术是将数据存储在服务器端的技术,会为每个客户端都创建一块内存空间存储客户的数据,但客户端需要每次都携带一个标识ID去服务器中寻找属于自己的内存空间。所以说Session的实现是基于Cookie,Session需要借助于Cookie存储客户的唯一性标识JSESSIONID

    1、向session域中存取数据

    session也是一个域对象,所以也可以用get/set/remove方法

    /*
     * request.getSession()方法内部会判断 该客户端是否在服务器端已经存在session
     * 如果该客户端在此服务器不存在session 那么就会创建一个新的session对象
     * 如果该客户端在此服务器已经存在session 获得已经存在的该session返回
     */
    HttpSession session = request.getSession();
    
    session.setAttribute("name","x5456");   // 设置Session
    
    String JSESSIONID = session.getId();    // 获取Session对象的编号id
    
    Cookie cookie = new Cookie("JSESSIONID",JSESSIONID);    // 手动创建一个存储JSESSIONID的Cookie,为该cookie设置持久化时间
    
    cookie.setPath("/WEB16");
    cookie.setMaxAge(60*10);
    
    response.addCookie(cookie);
    

    2、获得Session中的值

    HttpSession session = request.getSession();  // 获取域对象
    
    Object name = session.getAttribute("name");
    
    System.out.println( (String) name);

    Session对象的生命周期

    创建:第一次执行request.getSession()时创建

    销毁:

    1)服务器(非正常)关闭时

    2)session过期/失效(默认30分钟)

    时间的起算点:从不操作服务器端的资源开始计时

    可以在工程的web.xml中进行配置过期时间

    <session-config>

      <session-timeout>30</session-timeout>

    </session-config>

    3)手动销毁

    session.invalidate();

    作用范围:
    默认在一次会话中,也就是说在,一次会话中任何资源公用一个session对象

  • 相关阅读:
    sublime开启vim模式
    git命令行界面
    搬进Github
    【POJ 2886】Who Gets the Most Candies?
    【UVA 1451】Average
    【CodeForces 625A】Guest From the Past
    【ZOJ 3480】Duck Typing
    【POJ 3320】Jessica's Reading Problemc(尺取法)
    【HDU 1445】Ride to School
    【HDU 5578】Friendship of Frog
  • 原文地址:https://www.cnblogs.com/x54256/p/8450366.html
Copyright © 2011-2022 走看看