cookie 与 session
- http协议是无状态的,每次不会保存用户的状态信息
- 优点:http由于是无状态的,不必保存客户端的状态,所以可以减少服务器的CPU和内存的消耗
- http协议十分简单
由于http协议是无状态的,无法得知上一次请求的状态信息,当有的需要登陆时,每次的请求都要进行认证,在请求中添加自己的账号密码信息,但是每次都将账号和密码放入其中无疑增加了繁琐程度,每次的请求服务器都要到数据库中进行验证,降低了服务器效率,而且每次的账号密码都要用户进行输入,降低了用户的体验。所以出现了cookie 和 sesion
- cookie 和 session都是为解决http无状态的情况而出现的。
cookie
- cookie: 保存在客户端中的状态信息。可以分为会话cookie 与磁盘cookie.
- 会话cookie是临时性的,由浏览器维护保存在内存中,当浏览器退出时,会被自动清理掉。
- 磁盘cookie: 当一个会话cookie被设置了过期时间后就i会被保存在磁盘中,当到达过期时间或是手动的清理,才会被删除。
磁盘cookie是可以被其他的浏览器共享的。
cookie的具体操作:
- cookie信息添加在请求和响应中
- 客户端发出http请求(不包含cookie信息)
- 服务器发出的响应中包含set-cookie,来通知客户端保存cookie信息。
- 客户端收到响应,保存好cookie信息后,再在发出的http请求中加入cookie字段信息(包含设置指定的字段信息,不是全部账号密码信息)。
- 服务器根据收到的请求,将cookie中的信息与之前的记录进行对比进行认证。
cookie的缺陷:
- cookie信息会被附加在请求中,增加了请求的流量
- http请求中的cookie是明文传输的,具有一定的安全风险(https除外)
- cookie的大小限制在4kb左右,对于一些复杂的存储需求不能满足。
session
- session是在服务器上保留用户的操作历史信息,通过session id 来表示seesion, session id具有随机性和唯一性相当于是一个随机的密钥,避免在传输的过程中暴露账号密码等信息
session 的具体操作
- 客户端通过请求建立session会话
- 在响应中返回sessionid
- 访问网站通过session id 获得对应的内容
session机制:当客户端中的请求中不包含有seeionid时,会在服务器和客户端之间建立session会话,在后续请求中通过sessionid在session中进行检索(使用散列表进行检索)。如果请求中的sessionid检索不到(可能会被删除,会重新建立).
- 可以通过cookie机制来获取sessionid
区别:
cookie: 保存在客户端 安全性低
session: 保存在服务器 安全性好
具体的服务器有具体的使用方式,跟据服务器的使用情况进行所选择。
cookie 通常用于实现session机制