Python爬虫必须掌握的概念—Cookie和Session( 二 )


创建 Session当客户端访问到服务器 , 服务器会为这个客户端通过 request.getSession() 方法创建一个 Session, 如果当前 SessionID 还没有对应的 HttpSession 对象 , 就创建一个新的 , 并添加到 org.apache.catalina.Manager 的 Sessions 容器中保存 , 这就做到了对状态的保持 。 当然 , 这个 SessionID 是唯一的
保存 Session由图可知 , Session 对象已经保存在了 Manager 类中 , StandardManager 作为实现类 , 通过 requestedSessionId 从 StandardManager 的 Sessions 集合中取出 StandardSession 对象 。
我们来看看 StandardManager 是如何对所有 StandardSession 对象进行生命周期管理
当 Servlet 容器关闭:StandardManager 将持久化没过期的 StandardSession 对象(必须调用 Servlet 容器中的 stop 和 start 命令 , 不能直接 kill)
当 Servlet 容器重启时:StandardManager 初始化会重读这个文件 , 解析出所有 session 对象 。
销毁 SessionSession 的声明周期是从创建到超时过期 。 也就是说 , 当 Session 创建后 , 浏览器关闭 , 会话级别的 Cookie 被销毁 , 如果没有超过设定时间 , 该 SessionID 对应的 Session 是没有被销毁的 。
检查Session 是否失效检查每个 Session 是否失效是在 Tomcat 的一个后台线程完成的( backgroundProcess() 方法中);除了后台进程检验 Session 是否失效外 , 调用 request.getSession() 也会检查该 Session 是否过期 , 当然 , 调用这种方法如果过期的话又会重新创建一个新的 Session 。
总结 Cookie Session相同点:

  • Session 和 Cookie 都是为了让 http 协议又状态而存在 。
  • Session 通过 Cookie 工作 , Cookie 传输的 SessionID 让 Session 知道这个客户端到底是谁 。
不同点:
  • Session 将信息保存到服务器 , Cookie 将信息保存在客户端 。
工作流程:当浏览器第一次访问服务器时 , 服务器创建 Session 并将 SessionID 通过 Cookie 带给浏览器保存在客户端 , 同时服务器根据业务逻辑保存相应的客户端信息保存在 Session 中;客户端在访问时上传 Cookie, 服务器得到 Cookie 后获取里面的 SessionID , 来维持状态 。