理解Session与Cookie
Cookie的基本理解(购物卡)
Session与Cookie都是一种记录客户状态的机制。
当一个用户访问服务器的时候,服务器会把一些键值对返回给客户端浏览器,并加上一些限制条件。在这个条件限制下,当用户符合条件并且在下次访问服务器的时候,会把这些键值对数据又完整的带给服务器。就好比我去某个超市,超市给了我一张购物卡。在下次我去超市的时候,超市就能快速的识别我的身份等信息。
NAME为JSESSIONID的Cookie
同一个客户端每次与服务器交互的时候,不需要每次都把所有的Cookie都传回来。客户端第一次访问服务器的时候会生成一个唯一的ID,客户端只要传回这个ID就行了,这个ID通常是NAME为JSESSIONID的Cookie。有了SessionID,服务器端就可以创建HttpSession对象了。
Cookie安全问题
Cookie是通过Http的请求头进行传输的,它先从服务器端传输到客户端,然后再从客户端传输到服务器端。在这个传输的过程中,所有的数据都是存放在客户端的浏览器里面,所以这些数据有一定的安全隐患。而Session将数据保存在服务器端,所以相对Cookie而言,Session的安全性较高。
Cookie与Session各自的优缺点
大量的Cookie会占用很多网络带宽,并且不安全。另外,客户端浏览器对Cookie的存储是有数量与大小限制的。
在分布式系统中,Session很难被多个服务器共享。
总结
1)cookie数据存放在客户的浏览器上,session数据放在服务器上。
2)cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,考虑到安全应当使用session。
3)单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。
---------------------------------------------------相关的面试题-----------------------------------------------------------------------
2月12日 Cookie的一些缺点
首先Cookie是不安全的。Cookie保存的键值对由Http请求头传输,可以直接在浏览器上查看到,数据不安全。
其次就是客户端浏览器对Cookie的大小和数量都有所限制。
最后一点是,如果某个网站每天都有大量的访问量,那么Cookie会随着访问量的增加而增加,这势必会占用更多的网络带宽。
2月12日 客户端浏览器禁用Cookie怎么办
可以使用URL重写,也就是把session id附加在URL路径的后面。
2月12日 Session生命周期问题
调用 request对象的 request.getSession()方法的时候会创建一个Session对象。
当Session过期或者调用session.invalidate()方法的时候,Session对象被回收。
2月12日 关闭浏览器问题
关闭浏览器不会立即销毁session。因为session存放在服务器端。
关闭浏览器只会让保存在客户端的Cookie失效。
参考面试题:cookie机制和session机制的区别(面试题)