• 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对象

  • 相关阅读:
    composer
    brew转为国内源
    轻松生成一个golang的docker应用程序
    轻松生成一个vue的静态nginx
    【OS_Windows】windows server设置多用户可同时远程连接
    【OS_Linux】centos中查看已有用户信息
    【OS_Linux】查看Linux系统版本的命令
    【OS_Linux】借助终端Xshell实现Centos文件的上传与下载
    【OS_Linux】终端XShell的安装与使用
    【OS_Linux】VMware 中安装CentOS7
  • 原文地址:https://www.cnblogs.com/x54256/p/8450366.html
Copyright © 2020-2023  润新知