• Cookie与Session详解


    会话技术:

    会话技术指的是:在一次会话的范围内的多次请求间,共享数据
    一次会话指的是,浏览器第一次给服务器资源发送请求开始,会话建立,直到有一方断开为止

    会话技术分为客户端会话技术(Cookie)和服务器端会话技术(Session)


    Cookie:

    Cookie是客户端会话技术,将数据保存到客户端

    执行流程图解:

    在这里插入图片描述
    1.客户端浏览器访问你的网页,点击了某个按钮,向服务器发送了一份请求
    2.服务器会根据需求创建一个Cookie之后响应发送给浏览器,相当于一个身份验证。
    3.当浏览器再次访问该服务器下某个资源时,请求会自动携带这个Cookie到服务器,服务器会解析Cookie,就会知道是谁访问,而根据对象响应回对应数据。

    Cookie的实现原理:

    是基于响应头set-cookie和请求头cookie实现。

    Cookie的特点:

    1.cookie存储数据在客户端浏览器
    2.浏览器对于单个cookie的大小有限制(4kb),以及对同一个域名下的总cookie数量也有限制(20个)

    Cookie的作用:

    1.cookie一般用于存储少量的不太敏感的数据
    因为如果你能够截获某个用户的cookie变量,然后伪造一个数据包发送过 去,那么服务器还是 认为你是合法的。所以,使用cookie被攻击的可能性比较大。一般存储一些不太敏感的数据
    2.在不登录的情况下,完成服务器对客户端的身份识别

    Cookie的细节:

    1.Cookie是否可以一次发送多个?
    可以,可以创建多个Cookie对象,使用response调用多次addCookie方法发送cookie即可

    2.在浏览器存储时间?
    默认情况下,当浏览器关闭后,Cookie数据被销毁。
    想要持久化存储,可以通过setMaxAge(int seconds)设置。
    当参数为正数时,将Cookie数据写到硬盘的文件中,cookie存活时间为设置的参数的秒数
    当参数为负数时,为默认值,当浏览器关闭后,Cookie数据被销毁。
    当参数为零时,为删除对应cookie信息

    3.Cookie中是否可以存储中文?
    在tomcat8之前cookie不能存储中文数据,需要将中文数据转码(一般采用url编码)
    在tomcat8之后可以存储,但是特殊字符还是不允许(建议使用url编码进行存储)

    4.Cookie的获取范围有多大?
    同一个tomcat服务器中,默认情况下,同一个tomcat服务器中,虚拟目录不同不能共享,如果要在本服务器下都共享可以将虚拟目录设置为"/"。
    不同的tomcat服务器间cookie共享,需要使用setDomain(String path)并且如果设置一级域名相同,那么多个服务器之间才可以共享cookie


    Session:

    Session是服务器端会话技术,在一次会话的多次请求间共享数据,将数据保存在服务器端的HTTPSession对象中。

    执行流程图解:

    在这里插入图片描述
    1.当用户登录后,因为数据隐私,不能直接使用相对不安全的Cookie直接存储,这时,服务器会使用Session,将数据存储到服务器上
    2.当服务器响应的时候就会返回一个随机的id值,给Cookie,键名为JSESSIONID,值为session.getid。
    3.当用户再次访问时,服务器会解析这个id,调出用户信息。

    Session的实现原理:

    Session的实现是依赖于Cookie的
    在上面执行流程的第二步,为啥需要使用Cookie去传递一个id,是因为确保用户是同一个人,Session并不会直接传递给浏览器,而Demo01和Demo02想要共享数据(从服务器中提取到数据),那么就都需要创建一个Session对象,如何确保这两个模块的Session对象一致,就是这个Cookie传递的id值。所以说Session的实现依赖于Cookie。而id值每次登录都是随机的,而默认情况下,浏览器一关闭Cookie就被清除了,所以相对Cookie来说,Session较安全。

    Session的特点:

    1.session用于存储一次会话的多次请求的数据,存在服务器端
    2.session可以存储任意类型和大小的数据

    Session的细节:

    1.当客户端关闭后,服务器不关闭,两次获取session是否为同一个?
    默认情况下,不是同一个
    如果需要相同,则可以创建cookie,键为JSESSIONID,值为session.getid,设置最大存活时间,让cookie持久化存储

    2.客户端不关闭,服务器关闭后,两次获取的session是同一个吗?
    不是同一个,但是要确保数据不丢失,因此有两个tomcat自动化的过程:
    session的钝化:在服务器正常关闭之前,将session对象系列化到硬盘上
    session的活化:在服务器启动后,将session文件转化为内存中的session对象即可

    3.session的失效时间
    1.服务器关闭时,自动失效
    2.session对象调用invalidate()后失效
    3.session默认失效时间为30分钟


    面试题:Cookie和Session的区别:

    1.两者的存储位置不同,session存储数据在服务器端,cookie在客户端

    2.两者的大小限制不同,session没有数据大小限制,cookie为4kb

    3.两者的安全系数不同,seeing数据安全,cookie相对不安全

  • 相关阅读:
    学习总结 | 真实记录 MindSpore 两日集训营能带给你什么(一)!
    pragma once与ifndef的区别
    LiveGBS国标GB/T28181流媒体平台支持主子码流切换主码流stream/streamprofile
    链路的实际数据传输速率是多少
    RIP路由信息协议
    深度学习之 8 深度模型优化与正则化2
    怎么禁止用户点击f12查看数据,查看网页代码
    模板再认识
    DOM节点类型
    flink原理源码分析(一) 集群与资源@k8s
  • 原文地址:https://blog.csdn.net/m0_63217468/article/details/127426397