小议Cookie和Session

    Cookie和Session是服务器和前台开发人员都绕不开的两个非常重要的JSP九大内置对象中的两个。总体来说,Cookie是是存在于浏览器端的,而Session是存在于服务器端,但是,服务器要想唯一确定Session是什么,还是要借助cookie(将SessionID和对应的值存在客户端的Cookie中),也有其他的办法,这里不再赘述。

    对于采用http协议进行网络传送的服务,本次服务和下次服务之间是没有联系的,也就是无状态记录的。无状态的特性和需要记录用户状态的需求产生了Cookie,随后又产生了Session。

一、Cookie

      Cookie,它的出现解决了http的无状态特性。方法是服务器会为每个客户端的请求分发一个标识符,这个标识符就是Cookie。当下次该浏览器还有请求的时候,会把Cookie信息连同请求信息一起发到服务器,服务器拿到该Cookie后,就可以辨认用户的状态,从而实现和上次请求状态的连接。

      Cookie的创建和操作:在Servlet中,可以直接采用javax中的Cookie来创建,new Cookie();对于创建的Cookie对象,可以设置它的属性包括:Cookie的名字,安全性secure(),可以访问该Cookie的域名的demain(),最大生存时间MaxAge(int sec)等。对于生存时间的设置有三种情况:设置值为整数,表示在指定的秒内失效;设置为负数表示这是一个临时的Cookie,在本窗口及其子窗口有效,关闭浏览器后失效;设置为0表示Cookie失效,这可以作为使得Cookie失效的方法。对于Cookie的删除和修改是没有具体的方法的,可以通过创建一个和待修改或者删除一致的Cookie,一致的Cookie不仅包括Cookie名也包括Cookie中所有属性及值。

      Cookie记录特定用户的访问次数。方法是对于某个Cookie设置一个计数器,对于每次来的请求,分析到有相同的就把计数器加1,直到某个时间点,于是可以统计总的访问次数。

      Cookie是不能跨域名的,也就是不同域名下的同名Cookie是不同的对象。原因当然是对于每个客户端,访问不同的域名携带的Cookie是不同的。也就是访问Google携带的Cookie必然不是百度的。

      Cookie中对于中文的保存是编码形式,而不是具体的汉字。

      Cookie的储存。对于在指定时间或者永久的Cookie进行储存,主要是浏览器完成的。对于存储的位置设置可防止Cookie的混淆,一般通过demain(String path)设置。当前页面获得的Cookie是当前的ContextPath,也就是不同路径下的Cookie彼此的透明的。

      Cookie的安全性设置可保证敏感字段的信息安全。方法是设置Cookie的secure属性为true。浏览器只会在HTTPS和SSL等安全协议中传输此类Cookie。下面的代码设置secure属性为true。

      Javascript操作Cookie只限于本网站的Cookie,避免其他Cookie被窃取和调用。永久登录操作一般要将Cookie信息加密。

二、Session小议

      Session是服务器端使用的一种记录客户端状态的机制,使用上比Cookie简单一些,但是增加了存储,加大了服务器的存储压力。如果说Cookie机制是通过检查客户身上的“通行证”来确定客户身份的话,那么Session机制就是通过检查服务器上的“客户明细表”来确认客户身份。Session相当于程序在服务器上建立的一份客户档案,客户来访的时候只需要查询客户档案表就可以了。注意:Session对用户信息的存储是建立在Cookie机制之上的,如果浏览器不支持Cookie,那么需要采用url重写来传递sessionid。

      首先,明确的是浏览器关闭与否对服务器是透明的。Session在客户端第一次请求的时候创建。对于第一次请求这个概念,一般认为从打开这个页面开始,你在该页面或者子页面所做的一系列操作,仍然属于一次会话。一旦你把页面关闭,会话结束,默认的存储sessionid的Cookie也就失效了,下次请求也就无法找到原来的session对象,但是服务器端会默认存储该session对象30分钟并不会立即把它删除。如果服务器设置Cookie的存储在硬盘上,或者使用某种手段改写浏览器发出的HTTP请求头,把原来的sessionid发送给服务器,那么访问该动态资源在session的有效时间内,不会服务器不会创建新的session对象。

      对于Session的创建,一般是访问动态资源的时候,静态资源在加载的时候不会创建。另外,创建Session后,只要用户继续访问,服务器就会更新Session的最后活跃时间,并维护该Session。用户每访问服务器一次,无论是否操作Session,服务器都认为该用户的Session“活跃(active)”了一次。强制Session失效方法为invalidate()方法,这可以使Session失效。

三、区别和联系

  联系:都是用来跟踪特定用户信息的技术。Session的实现是基于Cookie的,当然也可以利用url重写来实现。

  区别:

      ①、Cookie是存放在客户端的,session是保存在服务器端的。

      ②、Cookie的信息量小一般3-4KB,session保存的数据较多

      ③、Session对象一般会在服务器上默认保存30min,如果访问量大,会增加服务器的内存开销。

      ④、Cookie是不安全的,可能会被Cookie欺骗。Session由于是针对某个特定用户创建的,相对安全。Cookie欺骗主要是,如果有人入侵你的机器,将你硬盘上cookie拷走,然后放在他的浏览器的目录下面,那么他登录该网站的时候就是用你的的身份登录的。所以 cookie是可以伪造的。当然,伪造的时候需要注意,直接copy  cookie文件到 cookie目录,浏览器是不认的,他有一个index.dat文件,存储了 cookie文件的建立时间,以及是否有修改,所以你必须先要有该网站的 cookie文件,并且要从保证时间上骗过浏览器

      ⑤、对于用户信息的保存应该采用session,安全。其他非敏感信息就可以采用Cookie保存。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值