HTML - Cookie & Session
基础概念:
会话: 一系列动作的起止 (如:打开浏览器到关闭浏览器)
HTTP协议本身是无状态的, 意味着不能记录或存储有关操作的历史数据
Cookie 解决 http 本身无状态的问题, 将数据保存在客户端
Session 建立客户端和服务端的状态保持, 信息保存在服务端, 标志利用 Cookie 保存在客户端
Cookie
通过扩展 http 协议来分发 : 在 http 响应头中添加一行特殊的指令用来提示浏览器生成 Cookie
组成 : 名字, 值, 过期时间, 路径, 域
会话Cookie: 以浏览器会话期为生命期的Cookie
Cookie一般是存在内存中,会随着浏览器的关闭而消失作用(会话Cookie)
但是设置了过期时间的Cookie一般不会随着浏览器的关闭而关闭, 它将Cookie保存在了硬盘里.
Session
通过服务端创建散列表的形式来保存数据, 在客户端(通常是利用 Cookie)保存查找数据的凭证(SessionID) (客户端Cookie一般保存的形式为 [SESSIONID=xxxxxxxxxxxxxxxxxxxx])
服务端首先接受客户端的请求, 并检查请求中是否含有 SessionID.
如果客户端的请求中含有 SessionID, 并且已经存在于服务端的, 则可以直接检索数据使用
如果客户端的请求中含有 SessionID, 但是并未在服务端存储的, 则服务端新建一个 Session
如果客户端的请求中不含有 SessionID, 则服务端新建一个 Session 和 SessionID 并且把 SessionID 返回给客户端.
如果客户端的cookie被禁止, 则通过重写URL的方式记录数据 html?SESSIONID=xxxxxxxxxxxxxxxxx
Session持久化:
Session 一般不会因为浏览器的关闭而被删除.
这是因为 Session 保存在服务端, 而服务端是没办法知道客户端的浏览器被关闭.
而一般造成关闭浏览器丢失Session的原因是. 客户端的(保存着SESSIONID的)Cookie随着浏览器的关闭而消失. 导致无法检索出数据.
所以为了预防Session一直存在, 设置Session失效时间机制.
Session保存的方式, 可以保存在内存(进程), 硬盘, 数据库中.