• session和cookie区别


     Session

    用于记录用户的登录与行为数据,即用户目前访问服务器上的哪些内容,状态是什么(这些数据没有必要直接存储在数据库中)。
    
    用户刷新页面(即再次访问服务器的时候),可以根据session,直接显示用户刚刚访问时的网页状态(比如翻页在哪里,输入了什么内容等等),为用户提供了更优体验。
    
    用户的session信息非常关键,它记录了用户进入页面、查看结果、点击结果、以及一些后续操作,通过session可以把用户的行为联系起来。
    

      

    • session是由服务器创建的
      • 当浏览器第一次访问服务器时,服务器会自动生成一个Session ID并将其通过响应发送到浏览器。(存放在cookie中,key为JSSIONID,value为Session ID的值)
      • 浏览器第二次发送请求会将前一次服务器响应中的Session ID放在请求中一并发送到服务器上,服务器从请求中提取出Session ID,并和保存的所有Session ID进行对比,找到这个用户对应的Session,并返还给请求者(Servlet)使用。

    (如果该session已经被销毁,那么服务器会创建一个新的session返还给浏览器)

      • 每个用户都会产生一个session。(如果并发访问很多,会很消耗服务器性能)
    • session对象的生命周期
      • 创建:第一次执行request.getSession()时创建
      • 销毁:
        • 1)服务器(非正常)关闭时
        • 2)session过期/失效(默认30分钟
    可以在工程的web.xml中进行配置
    <session-config>
        <session-timeout>30</session-timeout>
    </session-config>
        • 3)手动销毁session  session.invalidate(); 

     

    Cookie

    • cookie是存储在客户端的

    • cookie有大小限制以及浏览器在存cookie的个数也有限制

    session是没有大小限制和服务器的内存大小有关。但当访问增多,会比较占用服务器的性能。

    • cookie的生命周期
      • 不进行额外设置,cookie生命周期就是浏览器的会话周期,当关闭浏览器,cookie就消失。这个cookie成为会话cookie,存储在浏览器的内存中。
      • 设置了过期时间,cookie会存储在硬盘上,直至过期。

    1. 获取session对象

    HttpSession session = request.getSession();

    getSession()/getSession(true)、getSession(false)的区别

    getSession()/getSession(true):当session存在时返回该session否则新建一个session并返回该对象

    getSession(false):当session存在时该session,否则不会新建session,返回null

    2. 怎样向session中存取数据

    session.setAttribute(String name,Object obj);

    session.getAttribute(String name);

    session.removeAttribute(String name);

     

    3. 服务器端向客户端发送一个Cookie

    1)创建Cookie:

    Cookie cookie = new Cookie(String cookieName,String cookieValue);

    示例:

    Cookie cookie = new Cookie("username","zhangsan");

    那么该cookie会以响应头的形式发送给客户端:

    注意:Cookie中不能存储中文

    2)设置Cookie在客户端的持久化时间:

    cookie.setMaxAge(int seconds); ---时间秒

    注意:

    如果不设置持久化时间,cookie会存储在浏览器的内存中,浏览器关闭cookie信息销毁(会话级别的cookie),

    如果设置持久化时间,cookie信息会被持久化到浏览器的磁盘文件

    3)设置Cookie的携带路径:

    cookie.setPath(String path);

    注意:如果不设置携带路径,那么该cookie信息会在访问产生该cookie的web资源所在的路径都携带cookie信息

    示例:

    cookie.setPath("/WEB16");

    代表访问WEB16应用中的任何资源都携带cookie

    cookie.setPath("/WEB16/cookieServlet");

    代表访问WEB16中的cookieServlet时才携带cookie信息 

    4)向客户端发送cookie:

    response.addCookie(Cookie cookie);

    5)删除客户端的cookie:

      如果想删除客户端的已经存储的cookie信息,那么就使用同名同路径的持久化时间为0的cookie进行覆盖即可

    4.服务器端怎么接受客户端携带的Cookie

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

    1)通过request获得所有的Cookie:

    Cookie[] cookies = request.getCookies();

    2)遍历Cookie数组,通过Cookie的名称获得我们想要的Cookie

    for(Cookie cookie : cookies){

      if(cookie.getName().equal(cookieName)){

        String cookieValue = cookie.getValue();

      }

    }

     详细参照:https://blog.csdn.net/weixin_40521823/article/details/79837162?depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-4&utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-4

  • 相关阅读:
    c++ 有序二叉树的应用
    c++ 二叉树的遍历
    c++ 创建二叉树
    c++ 双向链表 的查找和删除
    c++ 双向循环链表
    c++ 双向链表
    Jzoj4209 已经没有什么好害怕的了
    Jzoj4209 已经没有什么好害怕的了
    后缀自动机转后缀树模板
    后缀自动机转后缀树模板
  • 原文地址:https://www.cnblogs.com/jszfy/p/12738268.html
Copyright © 2020-2023  润新知