深入浅出,解析Cookie与Session
深入浅出,解析Cookie与Session
Cookie和Session是Web开发中常见的会话管理技术,它们在存储位置、生命周期和安全性等方面存在显著差异。本文将深入浅出地解析Cookie和Session的概念、特征以及它们之间的区别与使用方法。
Session和Cookie的特征
- 存储位置:虽然很多人认为Session是服务端的,Cookie是客户端的,但实际上两者都是由服务器产生的。Session数据保存在服务器端,而Cookie数据则返回给客户端进行存储。
- 生命周期:Cookie和Session都有生命周期。Cookie的生命周期受到其自身设置的生命周期以及客户端是否保留Cookie文件的影响;Session的生命周期则受到其自身存活周期以及客户端浏览器是否关闭的影响。
- 作用域:两者都有作用域,Cookie以域名形式区分,而Session则与用户会话相关联。
Cookie和Session的区别与使用
Cookie
- 存储位置:不同的浏览器存储Cookie的位置不同,且不能通用。
- 域名区分:Cookie存储是以域名的形式进行区分的。
- 数据命名:Cookie的数据可以设置名字。
- 数量限制:一个域名下存放Cookie的个数是有限的,不同浏览器的限制也不同。
- 大小限制:每个Cookie存放的文件内容大小也是有限制的,不同浏览器的限制也不同。
jQuery操作Cookie示例:
添加一个"会话Cookie":
$.cookie('the_cookie', 'the_value');
这里没有指明Cookie有效时间,所创建的Cookie有效期默认到用户关闭浏览器为止,所以被称为“会话Cookie(session cookie)”。
创建一个Cookie并设置有效时间为7天:
$.cookie('the_cookie', 'the_value', { expires: 7 });
这里指明了Cookie有效时间,所创建的Cookie被称为“持久Cookie(persistent cookie)”。注意单位是:天。
创建一个Cookie并设置Cookie的有效路径:
$.cookie('the_cookie', 'the_value', { expires: 7, path: '/' });
在默认情况下,只有设置Cookie的网页才能读取该Cookie。如果想让一个页面读取另一个页面设置的Cookie,必须设置Cookie的路径。Cookie的路径用于设置能够读取Cookie的顶级目录。将这个路径设置为网站的根目录,可以让所有网页都能互相读取Cookie(一般不要这样设置,防止出现冲突)。
读取Cookie:
$.cookie('the_cookie');
删除Cookie:
$.cookie('the_cookie', null);
安全性考虑:Cookie是服务器返回给客户端并保存在客户端的,因此存在被暴力破解的可能性。
Session
原理上,Cookie与Session是相同的。使用jQuery操作Session需要引入jQuery.js与jquery.session.js。我们将使用sessionStorage
对象,它类似与localStorage
对象,只是sessionStorage
是用来储存Session数据的。当用户关闭浏览器这个数据会被清除掉。
jQuery操作Session示例:
添加数据:
$.session.set('key', 'value');
删除数据:
$.session.remove('key');
获取数据:
$.session.get('key');
清除数据:
$.session.clear();
安全性考虑:Session相对Cookie更加安全,因为用户只是拿到了一个Session ID来读取服务器保存的配置文件,而读取的逻辑实现状态等是没有办法轻而易举破解的,这种服务器的验证机制提供了更高的安全性。
总结
当我们遇到一些全局变量、状态值之类的,在一次请求或路径跳转等情况下,可以一步步存储和获取。但是当我们跨请求、跨路径想获取这些参数时,Cookie和Session就派上了用场。Cookie的配置文件在本地,Session的配置文件在服务器,两者都是会被清除掉的临时文件。