Cookie和Session
一、解决问题:
Http是一种无状态的协议,为了分辨链接是谁发起的,需自己去解决这个问题。不然有些情况即使是同一个网站每打开一个页面也都需要登录一下,cookie和session是为了解决这个问题而提出来的两种机制。
二、cookie:
- Cookies是服务器在本地机器上存储的小段文本并随每一个请求发送至同一服务器,是在客户端保持状态的方案
- 主要内容包括:名字、值、过期时间、路径和域
- key-value形式,存储在内存中,过期时间可设置,过期后自动清除
三、Session
- 存在服务器的一种用来存放用户数据的类HashTable结构。
- 浏览器第一次发送请求时,服务器自动生成了一HashTable和一Session ID来唯一标识这个HashTable,并将其通过响应发送到浏览器。浏览器第二次发送请求会将前一次服务器响应中的Session ID放在请求中一并发送到服务器上,服务器从请求中提取出Session ID,并和保存的所有Session ID进行对比,找到这个用户对应的HashTable。
- 一般这个值会有个时间限制,超时后毁掉这个值,默认30分钟。
- 当用户在应用程序的 Web页间跳转时,存储在 Session 对象中的变量不会丢失而是在整个用户会话中一直存在下去。
- Session的实现方式和Cookie有一定关系。建立一个连接就生成一个session id,打开几个页面就好几个了,这里就用到了Cookie,把session id存在Cookie中,每次访问的时候将Session id带过去就可以识别了.
四、Cookie和Session的区别:
- cookie数据存放在客户的浏览器上,session数据放在服务器上
- cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗
- 单个cookie保存的数据不能超过4k,很多浏览器限制一个站点最多保存20个cookie
- session会在一定时间内保存在服务器上,当访问增多时,会占用服务器性能
五、问题:单点登录中,cookie 被禁用了怎么办?(一点登陆,子网站其他系统不用再登录)
单点登录的原理是后端生成一个 session ID,设置到 cookie,后面所有请求浏览器都会带上cookie,然后服务端从cookie获取 session ID,查询到用户信息。
所以,保持登录的关键不是cookie,而是通过cookie 保存和传输的 session ID,本质是能获取用户信息的数据。
除了cookie,还常用 HTTP 请求头来传输。但这个请求头浏览器不会像cookie一样自动携带,需手工处理