浅析Cookie和Session—B/S架构中给用户的两张体验卡
网上冲浪是现代生活的必需品之一,纷繁的视觉体验以及便利的网络消费服务无形中给我们带来了舒适和愉悦。而在我们Browse的同时,其背后的技术也令我们体验有佳,其中Cookie和Session技术在其中扮演了有如会员般的角色。
Cookie和Session在本质上,就是一种保存相关信息的数据结构,只不过Cookie保存在客户端浏览器,而Session写在了服务器端的数据库或文件中。B/S会自行根据客户在浏览器端的操作,而保留并保存好客户的浏览信息,由于二者在存储内容、大小和时间上有一些限制,所以Cookie一般保存用户名密码等较小的数据,而Session则可以一些用户的个性化操作和配置信息(购物车,验证码,登陆信息等)。在此需要说明一下,由于Cookie和Session是由特定服务器生成的对应客户的信息,
它们只能被特定的主机和服务器进行读取和解析。
Cookie的命名是javax.servlet.http.Cookie,它是一个类名;而Session其实是HttpSession接口的一个实现类,这个接口的全名是javax.servlet.http.HttpSession,我们通常使用session时,服务器会对应调用request.getSession()方法创建一个session对象。
如何在浏览器端查看Cookie呢?可以看一下下面的截图。
[图片]
打开开发者工具选项,查看在一次请求和响应的参数中,有从本地文件中读取的全部Cookie(键值对形式),Cookie的值一般是加密过的字符串类型,浏览器会进行对应解析操作。
而session由于存储在服务器端,所以需要在客户端绑定一个键为sessionID的Cookie并写回到浏览器端,此ID作为客户机的唯一标识来确认用户在再次浏览时将返回给客户之前浏览过的内容。例如:京东在各大网站的广告区域,会根据客户在京东浏览过的端口进行记忆展示,如同是一个流动的商品浏览记录一样,此技术利用session,将浏览信息保存起来,而用于在各个广告区进行展示。
最后总结一下Cookie和Session的区别:
1.存储位置不同:Cookie存储在客户端浏览器,而Session是存储在服务器端的数据结构;
2.创建时间不同:当客户端向服务器端发出请求时,在第一个支持Cookie的网页中,会创建Cookie;而Session会在第一个支持Session的网页时,创建一个HttpSession的实现类;
3.创建的方法不同:Cookie用response.addCookie(Cookie cookie)的方法将创建好的Cookie写回到浏览器端;而Session用request.getSession()的方法在服务器端创建一个Session窗口,并将一个sessionID交给一个键为sessionID并给Cookie带回到浏览器端进行保存;
4.销毁时间不同:Cookie默认是会话级别的,当同一个浏览器关闭时,Cookie也就默认销毁了;而Session的默认保存时间为30min中,但他与Cookie中的sessionID密切相关,但Cookie已经销毁,所以我们其实无法找到对应的session了,也就默认它已经销毁了;
5.存储大小不同:Cookie一般只能存储到几k,且一般浏览器最多存储百位个;而Session取决于服务器的存储空间大小,一般无大小和个数的限制;
6.存储类型不同:Cookie(String,String),从Cookie的构造方法中可以看出,它一般存储字符串类型的数据;而Session.setAttribute(String,Object),它的值可以相信任意类型;
7.作用域不同:Cookie只在默认对应的网页存储的Cookie才可以使用,不能跳转;而Seesion存储的数据作为一个域,可以将数据保存并显示到其它页面中。
以上是我结合资料及自己的一些理解而整理的,难免会有些疏漏,欢迎大家批评指正!谢谢! |