cookie 与session的区别与理解

来源:互联网 发布:sqlserver最新版本 编辑:程序博客网 时间:2024/06/05 06:20

一、cookie机制和session机制的区别


具体来说cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案。

通俗的来说就是cookie在浏览器上(客服端)而session在服务端

Cookie是客户端的存储空间,由浏览器来维持
同时我们也看到,由于采用服务器端保持状态的方案在客户端也需要保存一个标识,所以session
机制可能需要借助于cookie机制来达到保存标识的目的,但实际上还有其他选择。

 

当用户连接服务器的时候浏览器会带着一个cookie来到服务器 ,服务器会生成一个唯一的session 每一个用户的ID都不一样

而Session这一数据则是保存到客户端,用Cookie保存的,用户提交页面时,会将这一 Session提交到服务器端,

来存取Session数据。这一过程,是不用程序猿的 ,这也是服务端的一个本身的机制。所以一旦客户端禁用Cookie,那么Session也会失效。

二、COOKIE能干嘛?

在一些投票之类的场合,我们往往因为公平的原则要求每人只能投一票,在一些WEB开发中也有类似的情况,这时候我们通常会使用COOKIE来实现。
一些网页的注册与登陆
session 则是服务端记住cookie的机制.

三、设置cookie过期的时间

例如: Response.Cookies("name2").expires=date+1,表示Cookies保存1天,
再比如: Response.Cookies("name2").expires=Hour+8,表示Cookies保存8小时。

设置Cookie时间

//过期时间
ck.setMaxAge(Integer.MAX_VALUE);
// //-1,浏览器
// ck.setMaxAge(-1);
// //0,一到浏览器端就失效
// ck.setMaxAge(0);

session 过期时间一般是三十分钟。也可以自己设置

1.      在web容器中设置(此处以tomcat为例)


  1. <!-- ==================== Default Session Configuration ================= -->  
  2.   <!-- You can set the default session timeout (in minutes) for all newly   -->  
  3.   <!-- created sessions by modifying the value below.    -->  
  4.     <session-config>  
  5.         <session-timeout>30</session-timeout>  
  6. </session-config>  

Tomcat默认session超时时间为30分钟,可以根据需要修改,负数或0为不限制session失效时间。


2.      在工程的web.xml中设置

[html] view plain copy
  1. <!-- 时间单位为分钟   -->  

<session-config>

      <session-timeout>15</session-timeout>

</session-config>


3.      通过Java代码设置

session.setMaxInactiveInterval(30*60);//以秒为单位


三种方式优先级:1 < 2 <3

三、区别 ——转载

总的来说:cookie机制采用的是在客户端保持状态的方案,session是一种服务器端保持的机制


存取方式的不同
Cookie中只能保管ASCII字符串,假如需求存取Unicode字符或者二进制数据,需求先进行编码。Cookie中也不能直接存取Java对象。若要存储略微复杂的信息,运用Cookie是比拟艰难的。
而Session中能够存取任何类型的数据,包括而不限于String、Integer、List、Map等。Session中也能够直接保管Java Bean乃至任何Java类,对象等,运用起来十分便当。能够把Session看做是一个Java容器类。


隐私策略的不同
Cookie存储在客户端阅读器中,对客户端是可见的,客户端一些程序可能会窥探、复制以至修正Cookie中的内容。而Session存储在服务器上,对客户端是透明的,不存在敏感信息泄露的风险。
     假如选用Cookie,比较好的方法是,敏感的信息如账号密码等尽量不要写到Cookie中。最好是像Google、Baidu那样将Cookie信息加密,提交到服务器后再进行解密,保证Cookie中的信息只要本                  人能读得懂。
而假如选择Session就省事多了,反正是放在服务器上,Session里任何隐私都能够有效的保护。


有效期上的不同
使用过Google的人都晓得,假如登录过Google,则Google的登录信息长期有效。用户不用每次访问都重新登录,Google会持久地记载该用户的登录信息。要到达这种效果,运用Cookie会是比较好的选择。只需要设置Cookie的过期时间属性为一个很大很大的数字。
由于Session依赖于名为JSESSIONID的Cookie,而Cookie JSESSIONID的过期时间默许为–1,只需关闭了阅读器该Session就会失效,因而Session不能完成信息永世有效的效果。运用URL地址重写也不能完成。而且假如设置Session的超时时间过长,服务器累计的Session就会越多,越容易招致内存溢出。


服务器压力的不同
Session是保管在服务器端的,每个用户都会产生一个Session。假如并发访问的用户十分多,会产生十分多的Session,耗费大量的内存。因而像Google、Baidu、Sina这样并发访问量极高的网站,是不太可能运用Session来追踪客户会话的。
而Cookie保管在客户端,不占用服务器资源。假如并发阅读的用户十分多,Cookie是很好的选择。关于Google、Baidu、Sina来说,Cookie或许是唯一的选择。


浏览器支持的不同
Cookie是需要客户端浏览器支持的。假如客户端禁用了Cookie,或者不支持Cookie,则会话跟踪会失效。关于WAP上的应用,常规的Cookie就派不上用场了。
假如客户端浏览器不支持Cookie,需要运用Session以及URL地址重写。需要注意的是一切的用到Session程序的URL都要进行URL地址重写,否则Session会话跟踪还会失效。


原创粉丝点击