session与cookie区别

    一、由于HTTP协议是无状态的协议,所以服务器需要记录用户状态时,就需要用某种机制来识别具体的用户,这个机制就是session。比如购物车,当你点下下单按钮时,由于HTTP协议无状态,所以并不知道是哪个用户操作的,所以服务端要为特定的用户创建特定的session,并产生特定的session id,用于标识这个用户,并且跟踪用户,这样才知道购物车里面都加了什么。

    这个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的一种方式。

猜你喜欢

转载自blog.csdn.net/debugbugbg/article/details/80098897
今日推荐