• Cookie和Session机制详解


    Cookie和Session机制详解

    简介

    • Cookie:通过客户端记录消息确定用户身份.
    • Session:通过服务器端记录消息确定用户身份.

    Cookie机制

    流程:

    • 用户访问网站时,会提供个人消息.
    • 服务器向客户端回传消息(存放在响应头中),包含Set-Cookie,用来指示需要设置Cookie,客户端收到后保存对应的Cookie.
    • 此后,客户端向服务器发送请求时,会把相应的Cookie再次发回至服务器(放在HTTP请求头中).
    • 服务器在收到客户端的请求时,通过分析请求头的Cookie可以得到客户端的信息,从而进行会话跟踪.

    组成

    • Name/Value:设置Cookie的名称及其对应的值.
    • Expires属性:设置Cookie的生存期.两种:会话性和持久性.会话性:用户关闭浏览器时失效.持久性:保存在硬盘中.
    • Path属性:定义Web站点可以访问该Cookie的目录.
    • Domain属性:指定可以访问该Cookie的Web站点或域.
    • Secure属性.指定是否使用HTTPS安全协议发送Cookie.
    • HTTPOnly属性:防止客户端脚本通过document.cookie属性访问Cookie,保证Cookie不被跨站脚本篡改.

    Cookie作用

    • HTTP协议是无状态的,一次连接断开后,再次进行数据交换需要建立新的连接.
    • 为了跟踪会话,网站采用Cookie跟踪会话.

    Cookie的不可跨域名性

    Cookie在客户端是由浏览器进行管理的,浏览器保证网站只能操作自己对应的Cookie而不会操作其他网站的Cookie,从而保证用户的隐私.

    Cookie的有效期

    • 若有效期为正数,则表示该Cookie在指定的时间之后自动失效.
    • 若有效期为负,则表示该Cookie仅在本浏览器窗口以及本窗口打开的子窗口内有效,关闭窗口后该Cookie将失效.此为临时Cookie,不会被持久化.
    • 若有效期为零,则表示删除该Cookie.

    Cookie的修改和删除

    Cookie不提供修改和删除.

    要修改某个Cookie时,只需新建一个同名的Cookie,并添加到response中覆盖原来的Cookie.

    若要删除一个Cookie时,需要新建一个同名Cookie,并设置其有效期为0.

    Cookie的安全属性

    HTTP是无状态的,也是不安全的.所有的数据不经过加密就直接在网络上传播.

    可以设置Cookie的secure为true,使得浏览器只在HTTPS和SSL等安全协议中传输此类Cookie.

    Session机制

    Session是服务器端使用的一种记录客户端状态的机制.

    Session称为会话,指的是客户端与服务器之间一系列交互的动作.

    流程:

    • 客户端访问服务器端.
    • 服务器端根据客户端的消息创建对应的Session,保存在服务器端,并为这个Session生成唯一的Session id.
    • 此后客户端访问服务器端时,通过携带Session id,服务器端可以用来获取已创建的Session.

    Session的生命周期

    Session生成后,只要用户继续访问,服务器将更新Session的最后访问时间,并维护该Session.用户每次访问服务器一次,无论是否读取Session,服务器认为该用户的Session活跃了一次.

    Session的有效期

    为了防止内存溢出,服务器把长时间内没有活跃的Session从内存删除.
    若超过超过时间没访问过服务器,Session会自动失效.

    Session对浏览器的要求

    服务器向客户端发送一个JSESSIONID的Cookie,其值为Session id,Session根据该Cookie来识别是否为同一个用户.

    不同浏览器访问服务器时,会生成不同的Session.若是浏览器打开的新窗口,子窗口会共享父窗口的Cookie,共享一个Session.

    URL地址重写

    对于客户端不支持Cookie,URL地址重写是将用户的Session id重写到URL地址中.服务器能够解析重写后的URL获取Session id.

    若客户端支持Cookie,生成原URL地址.
    若客户端不支持Cookie,传回重写后的带有jsessionid字符串的地址.

    对于不支持Cookie,还有一个使用Session的技术是表单隐藏字段.服务器自动修改表单,添加一个隐藏字段,以便表单提交时能够把session id传递回服务器.

    注:
    关闭浏览器不会导致Session消失.
    大部分Session机制都会使用会话Cookie来保存Session id,而关闭浏览器后这个Session id就会消失,再次连接服务器无法找到原来的Session.
    若将设置的Cookie保存下来,再次打开浏览器时带上原来的Session id,则仍然可以找到原来的Session.

    由于Session不会被删除,所有服务器为Session设置失效时间,若使用时间间隔超过失效时间,则删除Session以节省存储空间.

    Cookie与Session的关系

    • 存取方式不同:
      • Cookie只保存ASCII字符串,其他数据类型需要先进行编码.
      • Session能够存取任何数据类型的数据.相当于一个Java容器.
    • 隐私策略不同:
      • Cookie保存在客户端中,对客户端可见,客户端的程序可以查看并修改Cookie中的内容.
      • Session保存在服务器端,对客户端是透明的,不存在信息泄露的发现.
    • 有效期不同:
      • 需要持久保存用户的消息,可以通过设置Cookie的过期时间为很大的数值.
      • Session依赖于JSESSIONID的Cookie,其过期时间默认为-1,则关闭浏览器该Session就失效.且若设置Session的超时时间过长,服务器存储的Session很多,容易导致内存溢出.
    • 服务器压力不同:
      • Session保存在服务器端中.一个用户产生一个Session.若访问的用户很多,产生大量Session,消耗服务器的内存.
      • Cookie保存在客户端中,不占用服务器的资源.
    • 跨域支持不同:
      • Cookie支持跨域名访问,通过设置domain属性,所有同一后缀的域名都能够访问该Cookie.
      • Session不支持跨域名访问,仅在所在的域名内有效.

    参考:

  • 相关阅读:
    【转载】线程数究竟设多少合理
    【转载】lvs为何不能完全替代DNS轮询
    接口测试考虑点
    隐式等待的两种写法
    邮件的操作
    Python列表排序 reverse、sort、sorted 操作方法
    兼容和适配的区别
    文件操作-oracle数据库
    初试线程-文件操作
    Selenium Grid分布式测试入门笔记
  • 原文地址:https://www.cnblogs.com/truestoriesavici01/p/13214047.html
Copyright © 2020-2023  润新知