• 理解Cookie与Session


    • HTTP本身是无状态的.
      • 这符合HTTP协议设计的目的.客户端只是简单地向服务器请求某种资源.两者都没有必须记录彼此过去的行为,每一次请求之间都是独立的.
      • 为了保存状态.在客户端使用Cookie,在Server端使用Session.
      • 同时,服务器端状态保存方案在客户端也需要保存一个标识.所以,Session可能需要借助Cookie来进行工作.
    • 理解Cookie机制
      • cookie的分发是通过扩展HTTP协议来实现的.服务器通过在HTTP的响应头中加上一行特殊的指示以提示浏览器生成对应的Cookie.
      • 纯粹的客户端脚本(JS,VS)也可以生成Cookie.
      • 而Cookie的使用是浏览器按照一定的原则在后台自动发送给Server的.
        • 浏览器检查其存储的所有Cookie.如果某个cookie所声明的范围大于等于将要请求的资源的位置,则把该Cookie附在请求资源的HTTP请求头上发送给Server.
      • Cookie的主要内容:名字,值,过期时间,路径和域.
        • 域可与指定为具体的某个域名(google.com).
        • 路径就是跟在域名后面的URL路径(/,/foo).
        • 域+路径构成了cookie的作用范围.
      • 存储
        • 会话cookie.如果没有设定过期时间,则cookie的生命周期为浏览器会话期间.
          • 只要关闭浏览器,cookie就消失了.
          • 一般存储在内存而非硬盘中.
          • 是否可共享跟具体的使用的浏览器有关.
          • 一般使用js中的window.open打开的窗口会与源窗口共享内存cookie.
        • 设置了过期时间的,会被存储在硬盘中.
          • cookie一直有效到超过过期时间.
          • 硬盘中的cookie可以在不同的浏览器进程之间共享(多个IE窗口).
    • 理解Session机制
      • 一种服务器端的机制.
        • 使用散列表(或类似的)形式来保存信息.
      • 服务器需要为客户端的请求生成Session时的处理
        • 首先,检查客户端的请求中是否包含一个SessionID.
          • 如果含有,就说明之前为该客户端创建过Session.然后按照该ID检索出对应的session.
          • 如果没有,则为该客户端生成一个session,并在本次请求响应中将sessionID返回给客户端保存.
        • 保存sessionID可以使用cookie.
          • 这样根据自动传递cookie的规则,浏览器会在下次请求时,自动地将sessionID传递给Server.
          • 由于cookie可以被人为禁止.可使用URL重写来完成SessionID的传递.
            • 就是把sessionID直接附在URL路径的后面.
            • 有两种附加方式.
              • 作为URL的附加信息.表现形式为.http://...XXX;jessionID=xxxxxxxx
              • 作为查询字符串.表现形式为http://....XXX?jessionID=xxxxx.
              • 两种形式在客户端无差异,只是Server端的解析方式不同.第一种有利于区分session和正常的请求.
            • 为了在整个请求过程中保持状态,需要在所有可能的请求路径上都加上sessionID.
          • 另一种技术是表单隐藏字段.
            • Server端自动修改表单,添加一个hidden域,name="jessionID",value=sessionID.
            • 这样,客户端提交表单时,就能把sessionID提交到server.
      • session超时.
        • 除非程序通知Server删除一个Session,否则Server会一直保持Session.
        • 浏览器在关闭时,不会主动通知Server它将要关闭.因此服务器不会有机会知道浏览器已经关闭.
        • 只要关闭浏览器,Session就丢失了
          • 因为大部分的session机制都是用了会话cookie来保存sessionID.
          • 而关闭浏览器后,随着会话cookie的消失,这个sessionID也就消失了.
          • 再次连接Server时,也就无法找到原来的session.
          • 如果cookie被保存在硬盘中,或者改写了HTTP的请求头,能够把原来的sessionID发送给server,那么还是能够找到原来的Session.
        • 由于关闭浏览器不会导致删除session,所以server会为session设置一个失效时间.
          • 当距离客户端上次使用session的时间超过了该失效时间.服务器可以认为客户端已经停止了活动,从而删除session来节省存储空间.
  • 相关阅读:
    nginx安装:linux环境下安装包安装
    Effective C++
    Win32 Msg
    C++ 17
    Win32 Threads
    Exceptional C++
    C++11
    STL 分类
    C++类型转换
    红黑树
  • 原文地址:https://www.cnblogs.com/robyn/p/3790380.html
Copyright © 2020-2023  润新知