Cookie详解

来源:互联网 发布:淘宝秀当网怎么报名 编辑:程序博客网 时间:2024/05/16 17:44

最近闲来无事,复习复习以前的知识吧.

并总结一下,与猿猴们共享:Cook详解

1: cookie的为什么会出现呢?

问题:由于请求只能获得本范围的属性, 不能获得其他request的属性.(多个请求不能共享数据)

解决方案一:提高到servletcontext范围, 但是存在问题--->所有的用户共用这个属性, 导致了串户的操作.

解决方案二 : 将数据保存在客户端中去.这就是cookie的出现原因.

 2: 什么是cookie呢?

就是服务器将数据发送到客户端, 之后客户端再讲数据发送回来的技术.

至于客户端如何保存?不同的浏览器的保存方式是不同的, IE是保存在固定目录中的. 火狐和谷歌是指定文件中的.

从另外一个角度来看,cookie是客户端和服务器端进行有状态连接的保证.(这个时候cookie更像是标识信息)

3: 那么如何操作cookie呢?

(1)cookie技术的实现   

// 创建cookieCookie cookie = new Cookie("name", "jingtao");// 将cookie发送到客户端response.addCookie(cookie);/* * 这个操作影响的http response协议内容为: * Set-Cookie: name=jingtao *  * 当客户端中存在cookie的时候, 客户端发送请求的http request协议的内容为:  * Cookie: name=jingtao; JSESSIONID=EA052E877AC130124DFE26D86526B343 *  */


(2)cookie的持久化操作(之前的已经实现了在多个request中共享数据了了,但是仅仅限制于某一个会话范围,可不可以提高到每一个会话中request都共享数据呢)

 // Cookie 的持久化 // 创建cookie Cookie cookie = new Cookie("name","jingtao");  // 持久化cookie cookie.setMaxAge(60 * 60); // 在Set-Cookie响应头中 多了一个  Expires=Wed, 09-Jul-2014 02:36:00 GMT(过期时间) // 默认状态是 当浏览器关闭后 则相关的Cookie会自动删除  // cookie.setMaxAge(0); // 如果是0, 则代表客户端浏览器不保存这个cookie, 并且session缓存中的也不保存这个cookie. 这个功能其实是删除cookie  // cookie.setMaxAge(-1); // 如果是负数, 则代表客户端浏览器不保存, 但是session中保存.  // 添加cookie response.addCookie(cookie); // 在http response中多了一个头 Set-Cookie: 



(3)Cookie的路径(访问权限问题)

 /*  cookie路径:  <span style="white-space:pre"></span>cookie的默认路径为: 所在servlet的目录.  <span style="white-space:pre"></span>对于不同路径的cookie, 所访问的权限也是不同的:   <span style="white-space:pre"></span>当浏览器发送Cookie数据的时候, 会把本路径下的数据, 以及它父路径的数据都读取过来放到cookie头中.  <span style="white-space:pre"></span>那么如何修改cookie的路径呢?   cookie.setPath(); */ Cookie cookie = new Cookie("2222","2222");  // 设置cookie的访问路径  Set-Cookie: 2222=2222; Path=/web_servlet/ cookie.setPath("/web_servlet/");  // cookie.setPath("/"); // 如果是 / ,则代表是域名路径, 如www,baidu,com 就是 baidu.com/  response.addCookie(cookie);

(4)cookie跨域名共享数据

前提:1>在本地计算机中添加2个本地DNS解析域名,(在host目录下添加)

127.0.0.1 www.jingtao.com
127.0.0.1 www.bbs.jingtao.com


2>在tomcat中配置2个虚拟主机(tomcat的配置文件servlet.xml中添加)

<Host name="www.jingtao.com"  appBase="jingtao"            unpackWARs="true" autoDeploy="true"            xmlValidation="false" xmlNamespaceAware="false">  </Host>  <Host name="www.bbs.jingtao.com"  appBase="bbs"            unpackWARs="true" autoDeploy="true"            xmlValidation="false" xmlNamespaceAware="false">  </Host>


3>设置

Cookie cookie = new Cookie("name", "value");cookie.setMaxAge(60 * 60 * 60); cookie.setPath("/"); cookie.setDomain(".jingtao.com");//注意这里设置域名是主域名,不包括子域名response.addCookie(cookie)


(5)cookie的数据最大长度是多少呢?
// The browser is expected to support 20 cookies for each Web server, 浏览器对于每个站点支持20条Cookie// 300 cookies total总共支持300条// and may limit cookie size to 4 KB each. 每条Cookie的大小不超过4Kb



0 0
原创粉丝点击