1、共同点:
都是为了记录用户的状态。
2、不同点:
①在存储方面:Cookie保存在客户端浏览器中,而Session保存在服务器上。Cookie中只能保管ASCII字符串,而Session中能够存取任何类型的数据。
②在生命周期方面:cookie是通过maxAge设置过期时间。若设置了过期时间,浏览器就会把cookie保存到硬盘上,关闭后再次打开浏览器,这些cookie仍然有效直到超过设定的过期时间。Session在用户第一次访问服务器的时候自动创建。Session生成后, 只要用户继续访问,服务器就会更新Session的最后访问时间,并维护该Session。(有点类似缓存控制算法LRU) 为防止内存溢出,服务器会把长时间内没有活跃的Session从内存删除。这个时间就是Session的超时时间。如果超过了超时时间没访问过服务器,Session就自动失效了。
③依赖方面:Session保存在服务器,对客户端是透明的,它的正常运行仍然需要客户端浏览器的支持。并且在识别是否是同一浏览器方面:服务器向客户端浏览器发送一个名为JSESSIONID的Cookie,Session依据该Cookie来识别是否为同一用户。
④隐私策略方面:Cookie存储在客户端阅读器中,对客户端是可见的,客户端的一些程序可能会窥探、复制以至修正Cookie中的内容。而Session存储在服务器上,对客户端是透明的,不存在敏感信息泄露的风险。
⑤跨域支持上的不同:Cookie支持跨域名访问,Session仅在他所在的域名内有效。
3、优点:
一、Cookie
①极高的扩展性和可用性。
②可配置到期规则 Cookie 可以在浏览器会话结束时到期,或者可以在客户端计算机上无限期存在,这取决于客户端的到期规则。
③不需要使用大量服务器资源,Cookie 存储在客户端并在发送后由服务器读取
④简单性 Cookie 是一种基于文本的轻量结构,包含简单的键值对,结构简单
二、Session
①易于读写的特性
②易于站点的用户化
4、缺点:
一、Cookie
①Cookie数量和长度的限制。每个domain最多只能有20条cookie,每个cookie长度不能超过4KB,否则会被截掉
②潜在的安全风险 Cookie 可能会被篡改
二、Session
①依托性。如果某用户将浏览器设置为不兼容任何cookie,那么该用户就无法使用这个Session变量
②session会在一定时间内保存在服务器上。当访问增多,会比较占用较大的服务器性能
5、一般的攻击方式
一、Cookie
①直接访问Cookie文件查找想要的机密信息;
②在客户端和服务端进行Cookie信息传递时候进行截取,进而冒充合法用户进行操作;
③. 攻击者修改Cookie信息,所以在服务端接收到客户端获取的Cookie信息的时候,就会对攻击者伪造过的Cookie信息进行操作
解决方案:
不要在Cookie中保存敏感信息;
不要在Cookie中保存没有经过加密的或者容易被解密的敏感信息;
对从客户端取得的Cookie信息进行严格校验;
使用SSL/TLS来传递Cookie信息。
二、Session
①会话劫持(通过获取用户Session ID后,使用该Session ID登录目标账号的攻击方法)
解决方案: 使用User-Agent检测请求的一致性;设置HttpOnly,可以防止客户端脚本访问这个Cookie,从而有效的防止XSS攻击;关闭透明化Session ID;更改Session名称
②会话固定(诱骗受害者使用攻击者指定的会话标识(Session ID)的攻击手段)
解决方案:用户登录时生成新的Session ID;以及上诉的一些解决方案