文档章节

cookie总结

kt431128
 kt431128
发布于 2014/05/16 10:03
字数 963
阅读 26
收藏 0

从以下几个方面总结



  • cookie的概念

  • cookie的使用场景

  • cookie的运行机制

  • cookie的常用操作

  • cookie的共享范围

  • cookie的生命周期

cookie的概念:
cookie是客户端(浏览器)访问服务器时,由服务器发送给客户端的一小段信息,就好象是服务器送给客户端的“点心”。cookie相关的规范是HTTP协议的一部分,它的出现主要是由于HTTP协议的“无状态”特点所决定的。也就是说WEB服务器好比是"超市"售货员,他只管买东西,不关心是客户是谁,进行“不记名”响应请求,这样做主要是为了简单。但在实际web开发中我们又需要跟踪用户,比如网上购物中的“购物车”。因为为了解决该问题,cookie出现了。

cookie的使用场景

  • 在电子商务会话中标识用户

  • 记录用户名/密码

  • 定制网站

  • 定向广告



cookie的运行机制
如图所示

Cookie的运行机制是由HTTP协议规定的,多数Web服务器和浏览器都支持Cookie。Web服务器为了支持Cookie,需要具备以下功能:
在HTTP响应结果中添加Cookie数据
解析HTTP请求中的Cookie数据

浏览器为支持Cookie,需要具备以下功能:
解析HTTP响应结果中的Cookie数据
把Cookie数据保存到本地硬盘
读取本地硬盘上的Cookie数据,把它添加到HTTP请求中
另外,浏览器发送请求时,Cookie信息是在HTTP协议的请求头中的: 

HTTP/1.1 200 OK

Server:Apache-Coyote/1.1

[b]Set-cookie:userName=TOM;[/b]

Content-Type:text/plain

cookie常见操作 

首先cookie的格式就是名值对,比如 userName = "Tom",所以cookie中只能保存字符串。另外,浏览器中可以保存多个cookie。服务器对Cookie可以进行添加、读取、修改、删除的操作。
添加操作: 

Cookie theCookie = new Cookie("userName","TOM");

response.addCookie(theCookie);

读取操作: 

Cookie cookies[] = request.getCookies();

for(int i = 0; i < cookies.length; i++){

    out.println("Cookie name:" + cookie[i].getName());

    out.println("Cookie vale:" + cookie[i].getValue());

}

修改操作: 

Cookie cookies[] = request.getCookies();

for(int i = 0; i < cookies.length; i++){

    if(cookie[i].getName().equals("TOM"))

       cookie[i].setValue("JACK");   

}

cookie的生命周期 

Java中的Servlet向客户端写Cookie时,可以通过Cookie类的getMaxAge(int expiry)方法来设置Cookie的有效期,expiry以秒为单位,它具有以下含义:
   如果expiry > 0,指示浏览器在客户端硬盘上保存Cookie的时间为expiry秒;
   如果 expiry = 0,指示浏览器删除当前Cookie;
   如果 expiry < 0,指示浏览器不要把Cookie保存到硬盘中,Cookie仅存在与当前浏览器进程中,当浏览器进程关闭后,Cookie立即消失,这就是所谓的“会话Cookie”;

cookie的生命周期


假定app1中Xweb组件在浏览器中保存了一个Cookie,当再次访问app1、app2、app3中的其它web组件时候,浏览器是否会把Cookie添加到HTTP请求中?

  在默认情况下,只有app1中的Web组件能读取该Cookie。如果想改变Cookie的贡献范围,可以通过setPath()和setDomain(String domain)方法来设置。

让同一个Tomcat服务器A中app1和app2共享Cookie,那么app1中的组件在写Cookie的代码如下: 

Cookie cookie =  new Cookie("userName","TOM");

  cookie.setPath("/");

  response.addCookie(cookie);

setPath方法中“/”表示是服务器的根路径。 

只能让app2访问Cookie,则app1中的组件写Cookie的代码如下 

Cookie cookie =  new Cookie("userName","TOM");

  cookie.setPath("/app2/");

  response.addCookie(cookie);

只能让app1下的sub目录下组件访问Cookie,则app1中的组件写Cookie的代码如下 

Cookie cookie =  new Cookie("userName","TOM");

    cookie.setPath("/app1/sub/");

   response.addCookie(cookie);

让服务器B中app3下所有Web应用访问Cookie,则app1中的组件写Cookie的代码如下 

 Cookie cookie =  new Cookie("userName","TOM");

  cookie.setDomain(".cat.com");

  response.addCookie(cookie);






本文转载自:http://xiebh.iteye.com/blog/985128

kt431128
粉丝 14
博文 149
码字总数 68823
作品 0
海淀
程序员
私信 提问
购物车的实现——淘淘商城(二十六)

简介 将购物车信息存储在cookie中,并且可以在不登录的状态下使用购物车。 优点: 缺点: 在taotao-portal中开发,调用服务层服务。 添加购物车 需求 分析 在商品详情页中添加到购物车。 添加...

qq_40369829
2018/04/23
0
0
cookie中文乱码解决(php/js)

hp两个函数 urlencode urldecode js两个函数 decodeURI encodeURI 5.5以前的版本是 escape unescape 简单示例如下: 1、php 设置cookie ,js读取cookie 2、js设置cookie php读取cookie 3 js...

lilugirl
2016/06/22
138
1
Session与Cookie的区别和联系

具体来说cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案。同时我们也看到,由于采用服务器端保持状态的方案在客户端也需要保存一个标识,所以s...

hanzhankang
2012/10/25
153
0
移动Web端,游客点击商品的收藏按钮,登录完成,回来之后,如何自动收藏

我们都知道,移动Web端(M站环境下),很多时候,前端是无法判断用户的登录状态的,因为出于安全性考虑,与账号相关的cookie字段一般都是 http-only的。 如果前端想判断用户的登录状态,需要...

生命壹号
2018/07/20
0
0
Session, LocalStorage ,Cache-Control

Session 为什么要使用Session? Session的使用? 总结Cookie与Session: Cookie Session LocalStorage localStorage是html5提供的一个API,localStorage的实质是一个哈希 Session是服务器的哈...

code_susu
2018/07/31
0
0

没有更多内容

加载失败,请刷新页面

加载更多

怎样在磁盘上查找MySQL表的大小?这里有答案

导读 我想知道 MySQL 表在磁盘上占用多少空间,但看起来很琐碎。不应该在 INFORMATION_SCHEMA.TABLES 中提供这些信息吗?没那么简单! 我想知道 MySQL 表在磁盘上占用多少空间,但看起来很琐碎...

问题终结者
25分钟前
6
0
jQuery load() 方法实现加载远程数据

jQuery load() 方法是简单但强大的 AJAX 方法。load() 方法从服务器加载数据,并把返回的数据放入被选元素中。 语法: $(selector).load(URL,data,callback);必需的 URL 参数规定您希望加载的...

前端老手
27分钟前
5
0
Spring Boot缓存实战 Redis 设置有效时间和自动刷新缓存-2

问题 上一篇Spring Boot Cache + redis 设置有效时间和自动刷新缓存,时间支持在配置文件中配置,说了一种时间方式,直接扩展注解的Value值,如: @Override@Cacheable(value = "people#${s...

xiaolyuh
35分钟前
9
0
怎样在磁盘上查找MySQL表的大小?这里有答案

我想知道 MySQL 表在磁盘上占用多少空间,但看起来很琐碎。不应该在 INFORMATION_SCHEMA.TABLES 中提供这些信息吗?没那么简单! 我想知道 MySQL 表在磁盘上占用多少空间,但看起来很琐碎。不应...

Linux就该这么学
59分钟前
5
0
Redis

一、Redis支持的几种数据类型:字符串、List、SET、HASH、ZSET 二、Redis的缓存技术主要是为了降低关系数据库的负载并减少网站成本 三、在Redis里面,被MULTI命令和EXEC命令包围的所有命令会...

BobwithB
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部