Web编程之Cookie详解

1.cookie是什么
cookie 是一小文本信息,伴随用户请求在web服务器和浏览器之间传递。用户每次访问站点的时候,web应用程序都可以读取cookie包含的信息。在用户请求网站的某页面时,应用程序不仅返回请求的页面,同时也返回一个包含日期和时间的cookie。该cookie可能会保存在客户端的cookie文件夹中。

(注:cookie和session的区别在于cookie是在客户端保持状态的方案,而session则是在服务器端保持状态的方案。同时,由于在服务器端保持状态的方案在客户端也需要保存一个标识,所以session机制可能需要借助于cookie机制来达到保存标识的目的,但实际上还有其他选择。)
2.cookie 的限制
大多数浏览器支持最多可达4096字节(大约4KB)cookie。浏览器还限制了一个站点可以在客户端保存cookie数。大多数浏览器允许每个站点最多放20个cookie。如果试图保存更多的cookie,那么先前的cookie将被删除。还有些浏览器会对来自所有站点cookie总数限制,这个限制通常为300个。
3.cookie 的创建
创建cookie的时候要指定几个值。首先,指定cookie的名字和要保存的值。您也可以创建多个cookie。但每个cookie的名字必须唯一,以便日后取值时识别。(cookie是按名字储存的,所以如创建两个名称相同的cookie,那么最后那个cookie将覆盖前一个。)

4.cookie的持久性
如果不设置过期时间,则表示这个cookie生命周期为浏览器会话期间,只要关闭浏览器窗口或者会话超时,cookie就消失了。这种生命期为浏览会话期的cookie被称为会话cookie。会话cookie一般不保存在硬盘上而是保存在内存里。
如果设置了过期时间,浏览器就会把cookie保存到硬盘上,关闭后再次打开浏览器,这些cookie依然有效直到超过设定的过期时间。
当用户下次访问站点的时候,浏览器会先检查站点的所有cookie, 如果某个cookie已经过期,浏览器不会把这个cookie随页面请求一起发送给服务器,而是删除这个已经过期的cookie。(程序可以在用户磁盘上写入多个cookie。但个每个cookie的过期日期和时间不同。) 

存储在硬盘上的cookie可以在不同的浏览器进程间共享,比如两个IE窗口。而对于保存在内存的cookie,不同的浏览器有不同的处理方式。

5.cookie的发送
创建Cookie对象--》设置最大时效--》将Cookie放入到HTTP响应报头

如果你创建了一个cookie,并将他发送到浏览器,默认情况下它是一个会话级别的cookie - 存储在浏览器的内存中,用户退出浏览器之后被删除。如果你希望浏览器将该cookie存储在磁盘上,则需要使用maxAge,并给出一个以秒为单位的时间。将最大时效设为0则是命令浏览器删除该cookie。
cookie的发送需要使用HttpServletResponse的addCookie方法,将cookie插入到一个Set-Cookie HTTP请求报头中。由于这个方法并不修改任何之前指定的Set-Cookie报头,而是创建新的报头,因此我们将这个方法称为是addCookie,而非setCookie。同样要记住响应报头必须在任何文档内容发送到客户端之前设置。

6.cookie的读取
通过调用调用HttpServletRequest的getCookies方法,可获得Cookie对象的数组,对应由HTTP请求中Cookie报头输入的值。对数组进行循环,调用每个cookie的getName方法,直到找到感兴趣的cookie为止。cookie与你的主机(域)相关,而非你的servlet或JSP页面。因而,尽管你的servlet可能只发送了单个cookie,你也可能会得到许多不相关的cookie。
例如:

String cookieName = “userID”; 
    Cookie cookies[] = request.getCookies(); 
    if (cookies!=null){ 
        for(int i=0;i<cookies.length;i++){ 
            Cookie cookie = cookies[i]; 
            if (cookieName.equals(cookie.getName())){ 
                doSomethingWith(cookie.getValue()); 
            } 
        } 
} 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值