内容主要用于自己对资料的整理以及日后查阅,无任何其他目的,对于内容有不正确的地方还请邮箱联系小弟,在此先谢过。
session、cookie出现的原因
http无状态的协议,什么是无状态呢,是指http没有记忆的功能。如果没有状态的情况下,需要每次链接都传送大量数据,比如说在购物的时候,如果没有cookie和session每浏览加入购物车一次都得重新登陆。
为了解决这一问题,两种用于保持HTTP连接状态的技术就应运而生了,一个是Cookie,而另一个则是Session。
cookie?
This document defines the HTTP Cookie and Set-Cookie header fields.These header fields can be used by HTTP servers to store state (called cookies) at HTTP user agents, letting the servers maintain a stateful session over the mostly stateless HTTP protocol. Although cookies have many historical infelicities that degrade their security and privacy, the Cookie and Set-Cookie header fields are widely used on the Internet. This document obsoletes RFC 2965.
HTTP Cookie(也叫Web Cookie或浏览器Cookie)是服务器发送到用户浏览器并保存在本地的一小块数据,它会在浏览器下次向同一服务器再发起请求时被携带并发送到服务器上。
通常,它用于告知服务端两个请求是否来自同一浏览器,如保持用户的登录状态。Cookie使基于无状态的HTTP协议记录稳定的状态信息成为了可能。
解决问题?
Cookie主要用于以下三个方面:
- 会话状态管理(如用户登录状态、购物车、游戏分数或其它需要记录的信息)
- 个性化设置(如用户自定义设置、主题等)
- 浏览器行为跟踪(如跟踪分析用户行为等)
Cookie曾一度用于客户端数据的存储,因当时并没有其它合适的存储办法而作为唯一的存储手段,但现在随着现代浏览器开始支持各种各样的存储方式,Cookie渐渐被淘汰。由于服务器指定Cookie后,浏览器的每次请求都会携带Cookie数据,会带来额外的性能开销(尤其是在移动环境下)。新的浏览器API已经允许开发者直接将数据存储到本地,如使用 Web storage API (本地存储和会话存储)或 IndexedDB 。
注: 客户端维护会话状态
session?
session定义(来源API文档)
Provides a way to identify a user across more than one page request or visit to a Web site and to store information about that user.
【译文】:为用户识别多个页面请求或访问Web站点,并存储有关该用户的信息提供一种方法。
是指一类用来在客户端与服务器端之间保持状态的解决方案。 有时候Session也用来指这种解决方案的存储结构或服务器端的一种存储会话的机制
运行机制
当程序需要为某个客户端的请求创建一个session的时候,服务器首先检查这个客户端的请求里是否已包含了一个session标识 - 称为session id,如果已包含一个session id则说明以前已经为此客户端创建过session,服务器就按照session id把这个session检索出来使用(如果检索不到,可能会新建一个),如果客户端请求不包含session id,则为此客户端创建一个session并且生成一个与此session相关联的session id,session id的值应该是一个既不会重复,又不容易被找到规律以仿造的字符串,这个session id将被在本次响应中返回给客户端保存。
解决问题?
会话状态管理(session用于在用户身份验证后跟踪用户行为轨迹)
持久性方式:文件、数据库、客户端cookie
注: 服务端维护会话状态
小总结[session]
- 浏览器会话期间: 一系列的请求响应事务
- session机制:是指一类用来在客户端与服务器之间保持状态的解决方案
- session:有时候session也用来指这种解决方案的存储结构,如“把xxx保存在session里
- HttpSession:由于各种用于web开发的语言在一定程度上都提供了对这种解决方案的支持,所以在某种特定语言的语境下,session也被用来指代该语言的解决方案,比如经常把Java里提供的javax.servlet.http.HttpSession简称为session
cookie 与 session 的关系
- session技术基于cookie没有cookie,session也无法完成
- 浏览器在第一次访问服务器时,服务器发现没有携带sessionId,会自动创建session对象。并将创建的cookie对象保存sessionId发送给浏览器。
- 在浏览器发送请求时,带有cookieid的session
参考
HTTP State Management Mechanism
Cookies - Information that websites store on your computer
附录
cookie分类
会话期Cookie
会话期Cookie是最简单的Cookie:浏览器关闭之后它会被自动删除,也就是说它仅在会话期内有效。会话期Cookie不需要指定过期时间(Expires
)或者有效期(Max-Age)。需要注意的是,有些浏览器提供了会话恢复功能,这种情况下即使关闭了浏览器,会话期Cookie也会被保留下来,就好像浏览器从来没有关闭一样。
持久性Cookie
和关闭浏览器便失效的会话期Cookie不同,持久性Cookie可以指定一个特定的过期时间(Expires
)或有效期(Max-Age
)。
1 | Set-Cookie: id=a3fWa; Expires=Wed, 21 Oct 2015 07:28:00 GMT; |
提示: 当Cookie的过期时间被设定时,设定的日期和时间只与客户端相关,而不是服务端。