以前对于session和cookie的认识,就只是粗略的知道cookie保存在客户端,而session则保存在服务端。
如今查了些资料,对session和cookie也有了一个初步的认识,现在来总结一下:
session是由应用服务器维持的一个服务器端的存储空间,用户在连接服务器时,会由服务器生成一个唯一的SessionID,用该SessionID 为标识符来存取服务器端的Session存储空间。而SessionID这一数据则是保存到客户端,用Cookie保存的,用户提交页面时,会将这一SessionID提交到服务器端,来存取Session数据。这一过程,是不用开发人员干预的。所以一旦客户端禁用Cookie,那么Session也会失效。也就是说session其实是依赖于cookie的。
在php中,我们可以通过修改相关配置,让session不依赖于cookie而存在
php.ini中,把session.use_trans_sid设成1,那么连接的后面就会自己加sessionid,就通过url来传递session的key了,这时客户端就算禁止了cookie也可以使用session
cookie是客户端的存储空间,由浏览器来维持。
而什么时候用到cookie呢?
这里就引入了一个会话的概念
理论上,一个用户的所有操作都应该属于同一个会话,另一个用户的所有请求操作则应该属于另一个会话。就以购物车来举例,无论A用户在什么时间把物品加入了购物车,这都应该是属于同一个会话,不能放入B用户或C用户的购物车,因为这不属于同一个会话。
然而,而Web应用程序是使用HTTP协议传输数据的。HTTP协议是无状态的协议。一旦数据交换完毕,客户端与服务器端的连接就会关闭,再次交换数据需要建立新的连接。这就意味着服务器无法从连接上跟踪会话。即用户A购买了一件商品放入购物车内,当再次购买商品时服务器已经无法判断该购买行为是属于用户A的会话还是用户B的会话了。要跟踪该会话,必须引入一种机制。
而Cookie就是这样的一种机制。它可以弥补HTTP协议无状态的不足。在Session出现之前,基本上所有的网站都采用Cookie来跟踪会话。