Cookie与Session比较


Cookie和Session都可以进行会话跟踪,但是实现原理却大为不同。大部分场景,二者都能满足需求,但有些时候不能使用Cookie,有些时候不能使用Session。接下来从多个角度比较两者的区别:

存取方式比较

Cookie只能保存ASCII字符串,如果需要保存Unicode字符或二进制数据,需要进行UTF8、GBK或BASE64编码后再保存。而Session能够存储任何类型的数据,使用较方便。

隐私安全比较

Cookie存放在客户端,对客户端可见,客户端程序能够偷窥、复制甚至修改Cookie的数据。Session的数据存于服务端,对用户透明,不存在泄漏隐私的风险。因此,如果选用Cookie做会话管理,敏感信息应加密。

有效期比较

Cookie的maxAge属性用于设置Cookie的有效时间,maxAge>0表示maxAge秒后Cookie失效;maxAge<0表示临时Cookie,浏览器关闭后,该Cookie即失效;maxAge=0表示Cookie已被删除。因此,将maxAge设为一个很大的值,可以实现会话长期有效。
Session是基于名为JSESSIONID的Cookie实现的,而该Cookie的maxAge默认值为-1,只要浏览器关闭,就会失效。所以,Session无法实现长会话。

对服务器的影响比较

Cookie存于客户端,不占用服务器资源。Session存于服务端,当用户量大时,服务端存放的Session会非常多,必然消耗大量的内存,存在内存溢出的风险。所以,使用Session时,不易存放太多的数据。针对访问量大的场景,也不太适合使用Session。

跨域支持比较

Cookie的属性domain用于设置该Cookie对哪些域名有效,如将其设为".baidu.com",则所有以baidu.com结尾的域名都可以访问该Cookie。因此Cookie支持跨域访问。
而Session仅在它所在的域名内有效,不支持跨域访问。

浏览器支持比较

Cookie是需要浏览器支持的,如果浏览器不支持Cookie,或客户端禁用了Cookie,则会话跟踪就会失效。
如果浏览器不支持Cookie,就需要使用Session以及URL地址重写。这时,所有用到Session的URL都需要使用response.encodeURL(url)或response.encodeRedirectURL(url)进行地址重写,否则会导致session会话跟踪失效。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值