• HTTP 会话跟踪与状态管理: cookie 与 session


    HTTP最大的缺点:无状态
    因此,HTTP的状态管理(会话机制)用来弥补这一缺陷

    无状态,因此每个请求都是独立的
    可能导致后续请求需要重传,且需求累增,力大

    session与cookie叫做会话跟踪机制

    一小段文本信息

    • 服务器需要记录用户状态,就向客户端颁发一个Cookie

    • 客户端浏览器会把Cookie保存起来,当浏览器再请求该网站时,浏览器把请求的网址连同cookie一同发送给服务器,服务器检查该cookie来辨认用户状态

    简单地说,如果服务器端发送的响应头内有 Set-Cookie 的字段,那么浏览器就会将该字段的内容保持到本地。当下次客户端再往该服务器发送请求时,客户端会自动在请求头中加入 Cookie 值后再发送出去。服务器端发现客户端发送过来的Cookie后,会去检查究竟是从哪一个客户端发来的连接请求,然后对比服务器上的记录,最后得到该用户的状态信息。

    session

    • session是另一种记录客户状态的机制,保存在服务器上。客户端浏览器访问服务器的时候,服务器以某种形式把客户端信息存储在服务器上,也增加了一些服务端的存储压力(我记得有的用数据库存了session)

    • 客户端浏览器再次访问时,只需要从该session中查找该客户的状态就可以了

    cookie机制是通过检查客户身上的通行证来确认客户身份
    session机制就是通过检查服务器身上的客户明细表来检查客户身份

    首次访问生成sessionId和Session,服务器保存到映射区
    返回给客户端SessionId,保存到cookie保存区

    后续访问,cookie保存区携带SessionID,服务器据此查找对应的session,进行其他操作
    然后返回处理结果

    如果没找到session,或者客户端发来的cookie没有sessionID,那么生成一个新的cookie
    \session通过cookie把sessionID存储到客户端
    90%以上的网站都是这样支持的

    但是cookie可以被认为篡改,因此还有另外一种保存SessionID的方法

    • 这种方法就是URL重写,把查询sessionID当做一个参数写在url上
    • 隐藏表单,提交的时候传给服务器

    session超时失效

    cookie理论上可以永久存储

    • 为了防止内存溢出,服务器把很久没活跃的session删除,即是session的超时失效
    • 程序调用HttpSession.invalidate
    • 服务器被异常中止

    http保存状态的两种机制

    1. 存放位置不同
      session存储在服务器,cookie存储在客户端
    2. 安全性不同,隐私策略不同
      cookie存储在客户端,容易被篡改,存在敏感信息泄露的风险。或者把cookie信息加密,在服务器解密,保证cookie信息只有读的懂
      session存储在服务器,安全性比较好
    3. 有效期上的不同
      一、设置cookie有效时间,可以设置很久很久过期,在浏览器保存很长时间
      二、服务端会定时清除session,防止对服务器造成过多压力。session依赖于类似sessionID这样的cookie,而cookie的sessionID默认是-1,只要关闭浏览器,这个sessionID就失效了
    4. 对服务器造成的压力不同
      session保存在服务器端,并发量大的时候服务器压力大
      cookie保存在客户端,压力不大
  • 相关阅读:
    Slim + Twig 构建PHP Web应用程序
    Slim
    nginx+php+flight 构建RESTFul API
    Redis Master/Slave 实践
    spring.net +dapper 打造简易的DataAccess 工具类.
    API文档管理工具-数据库表结构思考.
    解决oracle报 ORA-12560错误,只有服务器重启恢复正常的问题
    浮点数的编码
    Jquery.BlockUI-遮罩
    class.forname & classloader
  • 原文地址:https://www.cnblogs.com/ltfxy/p/16309088.html
Copyright © 2020-2023  润新知