Cookie和Session都可以进行会话跟踪,但由于实现原理不同,各有特点,适用于不同应用场景。
  • 存取方式
Cookie只能保存ASCII字符,如果需要存取Unicode字符或二进制数据,需要进行UTF-8/GBK/BASE64等方式的编码,Cookie对Java对象等丰富信息的存取比较复杂。Session可以存储任何类型的数据,类似Java的容器类;
  •  隐私安全
  Cookie存储在客户端中,对客户端可见,客户端可以窥探、复制及修改其中内容;但Session存储在服务器上,对客户端透明,敏感信息泄漏的可能性较小。对于Cookie使用,帐号密码等敏感信息尽量不要写到Cookie中,最好将Cookie信息,提交到服务器再进行解密,保障Cookie信息只有自己能解析。Session存放在服务器上,存放帐号信息内容相对安全。
  •   会话有效期
  Cookie可以实现长期有效保存用户登录信息,只需设置maxAge属性即可,Session依赖与名为JESSIONID的Cookie,然而Cookie JESSIONID的maxAge默认值为-1,只要关闭了浏览器该Session就会失效,故Session不能实现登录信息永久有效。另外,如果设置Session超时时间过长,服务器累计的Session会越来越多,容易造成内存溢出。
从对服务器负担上,Session存储在服务器端,高并发访问时会产生很多Session,消耗大量内存,故用户量较大的网站不太可能使用Session来进行会话跟踪,但Cookie保存在客户端,不会占用服务器资源。
  • 浏览器支持
  如果客户端禁用了Cookie或不支持Cookie(某些WAP浏览器),则会导致会话跟踪失败,需要使用Session以及URL地址重写,所用到Session的URL都需要地址重写。
  • 跨域名
  Cookie支持跨域名访问,而Session不支持跨域名访问,仅在所在域名有效。
如果仅使用Cookie或Session可能实现不了理想效果,需尝试同时使用两者。