天天看点

Cookie与Session你了解多少?

一、cookie

cookie的产生:

在程序中,会话跟踪是很重要的事情。理论上,⼀个⽤户的所有请求操作都应该属于 同⼀个会话,⽽另⼀个⽤户的所有请求操作则应该属于另⼀个会话,⼆者不能混淆。 例如,⽤户A在超市购买的任何商品都应该放在A的购物车内,不论是⽤户A什么时间 购买的,这都是属于同⼀个会话的,不能放⼊⽤户B或⽤户C的购物车内,这不属于同 ⼀个会话。⽽Web应⽤程序是使⽤HTTP协议传输数据的。HTTP协议是⽆状态的协 议。⼀旦数据交换完毕,客户端与服务器端的连接就会关闭,再次交换数据需要建立新的连接。这就意味着服务器⽆法从连接上跟踪会话。即⽤户A购买了⼀件商品放⼊购 物车内,当再次购买商品时服务器已经⽆法判断该购买⾏为是属于⽤户A的会话还是⽤ 户B的会话了。要跟踪该会话,必须引⼊⼀种机制。Cookie就是这样的⼀种机制。它可 以弥补HTTP协议⽆状态的不⾜。在Session出现之前,基本上所有的⽹站都采⽤ Cookie来跟踪会话。

cookie:Cookie意为“甜饼”,是由W3C组织提出,最早由Netscape社区发展的⼀种机制。⽬前 Cookie已经成为标准,所有的主流浏览器如IE、Netscape、Firefox、Opera等都⽀持 Cookie。 Cookie实际上是⼀⼩段的⽂本信息。客户端请求服务器,如果服务器需要记录该⽤户状态,就使⽤response向客户端浏览器颁发⼀个Cookie。客户端浏览器会把Cookie保 存起来。 当浏览器再请求该⽹站时,浏览器把请求的⽹址连同该Cookie⼀同提交给服务 器。服务器检查该Cookie,以此来辨认⽤户状态。服务器还可以根据需要修改Cookie的 内容。

特性:

  1. Cookie具有不可跨域名性:根据Cookie规范,浏览器访问Google只会携带Google的Cookie,⽽不会携带 Baidu的Cookie。Google也只能操作Google的Cookie,⽽不能操作Baidu的Cookie。Cookie在客户端是由浏 览器来管理的。浏览器能够保证Google只会操作Google的Cookie⽽不会操作Baidu的Cookie,从⽽保证⽤户的隐私安全。浏览器判断⼀个⽹站是否能操作另⼀个⽹站Cookie的依据是域名。Google与Baidu的域名不⼀ 样,因此Google不能操作Baidu的Cookie。需要注意的是,虽然⽹站images.google.com与⽹站 www.google.com同属于Google,但是域名不⼀样,⼆者同样不能互相操作彼此的Cookie。
  2. Cookie的有效期:Cookie的maxAge决定着Cookie的有效期,单位为秒(Second)。如果maxAge属性为正 数,则表⽰该Cookie会在maxAge秒之后⾃动失效。 浏览器会将maxAge为正数的Cookie持久化,即写到对应 的Cookie⽂件中。⽆论客户关闭了浏览器还是电脑,只要还在maxAge秒之前,登录⽹站时该Cookie仍然有效,如果maxAge设置为负值的话,则为浏览器进程Cookie(内存中保存),关闭浏览器就失效;如果设置为0,则立即删除该Cookie。
  3. Cookie并不提供修改、删除操作

二、Session

session:会话(Session)跟踪是Web程序中常⽤的技术,用来跟踪用户的整个会话。常⽤的会话跟踪技术是Cookie与Session。Cookie通过在客户端记录信息确定用户身份, Session通过在服务器端记录信息确定用户身份。

除了使⽤Cookie,Web应⽤程序中还经常使⽤Session来记录客户端状态。Session是服务器端使⽤的⼀种记录客户端状态的机制,使⽤上⽐Cookie简单⼀些,相应的也增加 了服务器的存储压⼒。

Session是另⼀种记录客户状态的机制,不同的是Cookie保存在客户端浏览器中,⽽ Session保存在服务器上。客户端浏览器访问服务器的时候,服务器把客户端信息以某 种形式记录在服务器上。这就是Session。客户端浏览器再次访问时只需要从该Session 中查找该客户的状态就可以了。如果说Cookie机制是通过检查客户⾝上的“通⾏证”来 确定客户⾝份的话,那么Session机制就是通过检查服务器上的“客户明细表”来确认客 户⾝份。Session相当于程序在服务器上建⽴的⼀份客户档案,客户来访的时候只需要 查询客户档案表就可以了。

Session特性:

  • Session的生命周期:Session保存在服务器端。为了获得更⾼的存取速度,服务器⼀般 把Session放在内存⾥。 每个⽤户都会有⼀个独⽴的Session。Session在⽤户第⼀次访问 服务器的时候⾃动创建。需要注意只有访问JSP、Servlet等程序时才会创建Session,只 访问HTML、IMAGE等静态资源并不会创建Session。Session⽣成后,只要⽤户继续 访问,服务器就会更新Session的最后访问时间,并维护该Session。⽤户每访问服务器 ⼀次,⽆论是否读写Session,服务器都认为该⽤户的Session“活跃(active)”了⼀ 次。
  • Session的有效期:由于会有越来越多的⽤户访问服务器,因此Session也会越来越多。 为防⽌内存溢出,服务器会把长时间内没有活跃的Session从内存删除。这个时间就是 Session的超时时间。如果超过了超时时间没访问过服务器,Session就⾃动失效了

三、cookie和session的区别:

  • cookie数据存放在客户的浏览器上,session数据放在服务器上.
  • cookie不是很安全,别⼈可以分析存放在本地的COOKIE并进⾏COOKIE欺骗。考虑到安全应当使用session。
  • session会在⼀定时间内保存在服务器上。当访问增多,会⽐较占⽤你服务器的性能考虑到减轻服务器性能⽅⾯,应当使⽤cookie。
  • 单个cookie保存的数据不能超过4K,很多浏览器都限制⼀个站点最多保存20个cookie。 (Session对象没有对存储的数据量的限制,其中可以保存更为复杂的数据类型)
注:记住密码功能就是使⽤永久cookie写在客户端电脑硬盘上,下次登录时,⾃动将 cookie信息附加发送给服务端。

继续阅读