由于
HTTP
协议是无状态的协议,所以服务端需要记录用户的状态时,就需要用某种机制来识具体的用户,这个机制就是Session
. 典型的场景比如购物车,当你点击下单按钮时,
由于HTTP
协议无状态, 所以并不知道是哪个用户操作的,所以服务端要为特定的用户创建了特定的Session
,用于标识这个用户,并且跟踪用户,这样才知道购物车里面有几本书。
这个Session
是保存在服务端的,有一个唯一标识。在服务端保存Session
的方法很多,内存、数据库、文件都有。集群的时候也要考虑Session
的转移,在大型的网站,
一般会有专门的Session
服务器集群,用来保存用户会话,这个时候Session
信息都是放在内存的,使用一些缓存服务比如Memcached
之类的来放Session
。思考一下服务端如何识别特定的客户?这个时候
Cookie
就登场了。每次HTTP
请求的时候,客户端都会发送相应的Cookie
信息到服务端。实际上大多数的应用都是用Cookie
来实现Session
跟踪的,第一次创建Session
的时候,服务端会在HTTP
协议中告诉客户端,需要在Cookie
里面记录一个Session ID
,以后每次请求把这个会话ID
发送到服务器,
我就知道你是谁了。有人问,如果客户端的浏览器禁用了Cookie
怎么办?一般这种情况下,会使用一种叫做URL重写
的技术来进行会话跟踪,即每次HTTP
交互,URL
后面都会被附加上
一个诸如sid=xxxxx
这样的参数,服务端据此来识别用户。Cookie
其实还可以用在一些方便用户的场景下,设想你某次登陆过一个网站,下次登录的时候不想再次输入账号了,怎么办?这个信息可以写到Cookie
里面,访问网站的时候,
网站页面的脚本可以读取这个信息,就自动帮你把用户名给填了,能够方便一下用户。这也是Cookie
名称的由来,给用户的一点甜头。所以,总结一下:
Session
是在服务端保存的一个数据结构,用来跟踪用户的状态,这个数据可以保存在集群、数据库、文件中;Cookie
是客户端保存用户信息的一种机制,
用来记录用户的一些信息,也是实现Session
的一种方式。
转载于:https://www.cnblogs.com/h2so/p/5648163.html