Session和Cookie的区别
从存储方式上比较数据库
- Cookie只能存储字符串,若是要存储非ASCII字符串还要对其编码。
- Session能够存储任何类型的数据,能够把Session当作是一个容器
从隐私安全上比较跨域
- Cookie存储在浏览器中,对客户端是可见的。信息容易泄露出去。若是使用Cookie,最好将Cookie加密
- Session存储在服务器上,对客户端是透明的。不存在敏感信息泄露问题。
从有效期上比较浏览器
- Cookie保存在硬盘中,只须要设置maxAge属性为比较大的正整数,即便关闭浏览器,Cookie仍是存在的
- Session的保存在服务器中,设置maxInactiveInterval属性值来肯定Session的有效期。而且Session依赖于名为JSESSIONID的Cookie,该Cookie默认的maxAge属性为-1。若是关闭了浏览器,该Session虽然没有从服务器中消亡,但也就失效了。
从对服务器的负担比较安全
- Session是保存在服务器的,每一个用户都会产生一个Session,若是是并发访问的用户很是多,是不能使用Session的,Session会消耗大量的内存。
- Cookie是保存在客户端的。不占用服务器的资源。像baidu、Sina这样的大型网站,通常都是使用Cookie来进行会话跟踪。
从浏览器的支持上比较服务器
- 若是浏览器禁用了Cookie,那么Cookie是无用的了!
- 若是浏览器禁用了Cookie,Session能够经过URL地址重写来进行会话跟踪。
从跨域名上比较markdown
- Cookie能够设置domain属性来实现跨域名
- Session只在当前的域名内有效,不可夸域名
Cookie和Session共同使用
若是仅仅使用Cookie或仅仅使用Session可能达不到理想的效果。这时应该尝试一下同时使用Session和Cookiecookie
那么,何时才须要同时使用Cookie和Session呢?session
- 在上一篇博客中,咱们使用了Session来进行简单的购物,功能也的确实现了。如今有一个问题:我在购物的途中,不当心关闭了浏览器。当我再返回进去浏览器的时候,发现我购买过的商品记录都没了!!为何会没了呢?缘由也很是简单:服务器为Session自动维护的Cookie的maxAge属性默认是-1的,当浏览器关闭掉了,该Cookie就自动消亡了。当用户再次访问的时候,已经不是原来的Cookie了。
- 咱们如今想的是:即便我不当心关闭了浏览器了,我从新进去网站,我还能找到个人购买记录。
要实现该功能也十分简单,问题其实就在:服务器为Session自动维护的Cookie的maxAge属性是-1,Cookie没有保存在硬盘中。我如今要作的就是:把Cookie保存在硬盘中,即便我关闭了浏览器,浏览器再次访问页面的时候,能够带上Cookie,从而服务器识别出Session。并发
第一种方式:只须要在处理购买页面上建立Cookie,Cookie的值是Session的id返回给浏览器便可dom
Cookie cookie = new Cookie("JSESSIONID",session.getId());
cookie.setMaxAge(30*60);
cookie.setPath("/ouzicheng/");
response.addCookie(cookie);
