- 浏览: 85502 次
文章分类
最新评论
第八章 cookie管理
核心方法:
1.在创建cookie对象后,将cookie发送到客户端程序之前,一般应该调用setMaxAge方法。
2.如果要指定cookie适用于您的网站上的所有URL,使用cookie.setPath("/"),也就是所有页面都接受该cookie
警告:
1.创建和操作Cookie对象对客户程序没有任何影响,必须显式地使用response.addCookie将cookie发送到客户端。
学习笔记
一、cookie的优点
1.在电子商务会话中标示用户。2.记录用户名和密码。3.定制站点,用户自己定制主页面的外观。用户选择希望看到的哪个天气预报等等。4.定向广告。有cookie的情况下,通过记录之前的搜索,这些网站可以识别出我们的兴趣,从而显示出我们感兴趣的广告,而不是随机的广告。
二、cookie存在的一些问题
为了解决cookie引发的隐私问题。1.如果能够在禁用cookie的情况下也为用户提供合理的功能。2.作为servlet和jsp中用到的cookie,我们尽量避免用cookie存储特别敏感的信息。
三、cookie的发送和接受
1.向客户程序发送cookie
a.创建cookie对象,给出cookie的名称和cookie的值,两者都是字符串。
b.如果我们创建一个cookie,并将它发送到浏览器,默认情况下,它是一个会话级别的cookie,存储在浏览器的内存中,当我们关闭浏览器时,就会被删除,如果我们希望浏览器将该cookie存储在磁盘上,则需要使用maxAge,并给出一个以秒为单位的时间。
c.将cookie放入http相应报头
综上所述:
2.从客户端读取cookie
a.调用request.getCookies()返回Cookie对象的数组,b.循环Cookie数组,有了cookie的数组之后,我们调用Cookie的getName方法,知道找到一个与您希望的名称想匹配的对象为止。
综上所述:
四、使用cookie检测初访者
不能仅因为cookie数组为null就认为用户是个初来者,因为这可能是由于用户将cookie删除或禁用而造成的结果。但是,如果数组非null,也不过是显示客户曾经到过您的网站,并不能说明它访问过我们的servlet。
五、使用cookie属性
1.cookie属性只适用于从服务器端输出到客户端的cookie,服务器端来自于浏览器的cookie并没有设置这些属性,因而不要期望通过设置request.getCookies得到的cookie中可以使用这些属性。也就是说,我们在服务器端设置这些值,然后发送给客户端,而这些属性不存在于浏览器返回给服务器的报头,所以我们也不能取出这些cookie的属性。可以这样理解,因为cookie就是用于客户端来保存和用户有关的信息的。而在服务器端我们不需要这些特性。
2.setPath(),如果没有指定一个路径,浏览器只将该cookie返回给发送cookie的页面所在目录中或之下的URL,而setPath("/")指定服务器的所有页面都应该收到该cookie.
3.一般由于cookie的名字和值已经在cookie的构造方法中设置过了,我们只使用cookie的getName和getValue得到cookie的名字和值,而不去设置cookie的名字和值
六、区分持续cookie和会话cookie
我们来看几种情况,首先我们初次打开浏览器时,显示的应该是No cookies,因为这时只是把完成了把cookie发送给客户端的任务。下面看两种情况,首先当我们刷新该页面时,就会显示
Session-Cookie0 Cookie-Value-S0
Session-Cookie1 Cookie-Value-S1
Session-Cookie2 Cookie-Value-S2
Persistent-Cookie0 Cookie-Value-P0
Persistent-Cookie1 Cookie-Value-P1
Persistent-Cookie2 Cookie-Value-P2
但当我们关闭原来的页面,再次打开浏览器访问该页面时,就会发现只出现
Persistent-Cookie0 Cookie-Value-P0
Persistent-Cookie1 Cookie-Value-P1
Persistent-Cookie2 Cookie-Value-P2
这就代表着会话的cookie(也就是没有设置setMaxAge的cookie)只存在于当前浏览会话,如果浏览器关闭了就不复存在,而持续的cookie就会存放在硬盘上,不会以关闭计算机或是关闭浏览器而改变。
当我们把持续cookie存放在硬盘上的时间改的短一点时。
首先当我们过了设置的时间再次刷新首次得到的浏览器客户端时,显示
Session-Cookie0 Cookie-Value-S0
Session-Cookie1 Cookie-Value-S1
Session-Cookie2 Cookie-Value-S2
因为我们并没有关闭浏览器,所以会话cookie并没有消失。而一开始发送给浏览器的持续cookie在硬盘上存放的时间也过了最大的时间限制,所以就会显示会话cookie的值。
而当我们关闭浏览器,然后过了设置的时间再次打开时,就显示No Cookie了。
七、修改cookie的值,记录用户的访问计数。
如果我们希望周期性地修改cookie的值应该怎么办?
我们只需要发送相同的cookie名称,但使用不同的cookie的值,如果我们调用setValue是没有用的,因为除了要设置其值以外,
我们还要调用setMaxAge和setPath。
核心方法:
1.在创建cookie对象后,将cookie发送到客户端程序之前,一般应该调用setMaxAge方法。
2.如果要指定cookie适用于您的网站上的所有URL,使用cookie.setPath("/"),也就是所有页面都接受该cookie
警告:
1.创建和操作Cookie对象对客户程序没有任何影响,必须显式地使用response.addCookie将cookie发送到客户端。
学习笔记
一、cookie的优点
1.在电子商务会话中标示用户。2.记录用户名和密码。3.定制站点,用户自己定制主页面的外观。用户选择希望看到的哪个天气预报等等。4.定向广告。有cookie的情况下,通过记录之前的搜索,这些网站可以识别出我们的兴趣,从而显示出我们感兴趣的广告,而不是随机的广告。
二、cookie存在的一些问题
为了解决cookie引发的隐私问题。1.如果能够在禁用cookie的情况下也为用户提供合理的功能。2.作为servlet和jsp中用到的cookie,我们尽量避免用cookie存储特别敏感的信息。
三、cookie的发送和接受
1.向客户程序发送cookie
a.创建cookie对象,给出cookie的名称和cookie的值,两者都是字符串。
Cookie c =new Cookie("userID","a1234")。
b.如果我们创建一个cookie,并将它发送到浏览器,默认情况下,它是一个会话级别的cookie,存储在浏览器的内存中,当我们关闭浏览器时,就会被删除,如果我们希望浏览器将该cookie存储在磁盘上,则需要使用maxAge,并给出一个以秒为单位的时间。
cookie.setMaxAge(60*60*24*7);//one week.当然最后不要忘了把它放入报头
c.将cookie放入http相应报头
response.addCookie();
综上所述:
Cookie userCookie = new Cookie("user","uid1234"); userCookie.setMaxAge(60*60*24*365); response.addCookie(userCookie);
2.从客户端读取cookie
a.调用request.getCookies()返回Cookie对象的数组,b.循环Cookie数组,有了cookie的数组之后,我们调用Cookie的getName方法,知道找到一个与您希望的名称想匹配的对象为止。
综上所述:
String cookieName = "userID"; Cookie [] cookies = request.getCookies(); for(int i = 0 ; i <cookies.length; i++){ Cookie cookie = cookies[i]; if(cookieName.equals(cookie.getName())){ doSomething(cookie.getValue()); } }
四、使用cookie检测初访者
不能仅因为cookie数组为null就认为用户是个初来者,因为这可能是由于用户将cookie删除或禁用而造成的结果。但是,如果数组非null,也不过是显示客户曾经到过您的网站,并不能说明它访问过我们的servlet。
五、使用cookie属性
1.cookie属性只适用于从服务器端输出到客户端的cookie,服务器端来自于浏览器的cookie并没有设置这些属性,因而不要期望通过设置request.getCookies得到的cookie中可以使用这些属性。也就是说,我们在服务器端设置这些值,然后发送给客户端,而这些属性不存在于浏览器返回给服务器的报头,所以我们也不能取出这些cookie的属性。可以这样理解,因为cookie就是用于客户端来保存和用户有关的信息的。而在服务器端我们不需要这些特性。
2.setPath(),如果没有指定一个路径,浏览器只将该cookie返回给发送cookie的页面所在目录中或之下的URL,而setPath("/")指定服务器的所有页面都应该收到该cookie.
3.一般由于cookie的名字和值已经在cookie的构造方法中设置过了,我们只使用cookie的getName和getValue得到cookie的名字和值,而不去设置cookie的名字和值
六、区分持续cookie和会话cookie
response.setContentType("text/html"); PrintWriter out = response.getWriter(); for(int i = 0 ; i < 3 ;i++){ Cookie cookie = new Cookie("Session-Cookie"+i,"Cookie-Value-S"+i); response.addCookie(cookie); } for(int i = 0 ; i < 3 ; i++){ Cookie cookie = new Cookie("Persistent-Cookie"+i,"Cookie-Value-P"+i); cookie.setMaxAge(60*60); response.addCookie(cookie); } Cookie [] cookies = request.getCookies(); String cookieName ; String cookieValue ; out .println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">"); out.println("<HTML>"); out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>"); out.println(" <BODY>"); out.println("<table>"); out.println("<tr>"+"<th>CookieName</th>"+"<th>CookieValue</th>"+"</tr>"); if(cookies==null){ out.println("NO Cookies"); } else{ for(int i = 0 ; i < cookies.length;i++){ Cookie cookie = cookies[i]; cookieName = cookie.getName(); cookieValue = cookie.getValue(); out.println("<tr><td>"+cookieName+"</td>"+"<td>"+cookieValue +"</td>"+"</tr>"); } } out.println("</table>"); out.println(" </BODY>"); out.println("</HTML>"); out.flush(); out.close();
我们来看几种情况,首先我们初次打开浏览器时,显示的应该是No cookies,因为这时只是把完成了把cookie发送给客户端的任务。下面看两种情况,首先当我们刷新该页面时,就会显示
Session-Cookie0 Cookie-Value-S0
Session-Cookie1 Cookie-Value-S1
Session-Cookie2 Cookie-Value-S2
Persistent-Cookie0 Cookie-Value-P0
Persistent-Cookie1 Cookie-Value-P1
Persistent-Cookie2 Cookie-Value-P2
但当我们关闭原来的页面,再次打开浏览器访问该页面时,就会发现只出现
Persistent-Cookie0 Cookie-Value-P0
Persistent-Cookie1 Cookie-Value-P1
Persistent-Cookie2 Cookie-Value-P2
这就代表着会话的cookie(也就是没有设置setMaxAge的cookie)只存在于当前浏览会话,如果浏览器关闭了就不复存在,而持续的cookie就会存放在硬盘上,不会以关闭计算机或是关闭浏览器而改变。
当我们把持续cookie存放在硬盘上的时间改的短一点时。
首先当我们过了设置的时间再次刷新首次得到的浏览器客户端时,显示
Session-Cookie0 Cookie-Value-S0
Session-Cookie1 Cookie-Value-S1
Session-Cookie2 Cookie-Value-S2
因为我们并没有关闭浏览器,所以会话cookie并没有消失。而一开始发送给浏览器的持续cookie在硬盘上存放的时间也过了最大的时间限制,所以就会显示会话cookie的值。
而当我们关闭浏览器,然后过了设置的时间再次打开时,就显示No Cookie了。
七、修改cookie的值,记录用户的访问计数。
如果我们希望周期性地修改cookie的值应该怎么办?
我们只需要发送相同的cookie名称,但使用不同的cookie的值,如果我们调用setValue是没有用的,因为除了要设置其值以外,
我们还要调用setMaxAge和setPath。
String accessCount = CookieUtilities.getCookieValue(request, "accessCount", "1"); int count = Integer.parseInt(accessCount); LongLivedCookie cookie = new LongLivedCookie("accessCount",String.valueOf(count+1)); response.addCookie(cookie); response.setContentType("text/html"); PrintWriter out = response.getWriter(); out .println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">"); out.println("<HTML>"); out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>"); out.println(" <BODY>"); out.println("You are the "+count+"user"); out.println(" </BODY>"); out.println("</HTML>"); out.flush(); out.close();
发表评论
-
servlet和jsp核心编程(第2版)第十六章 简化对Java代码的访问:jsp2.0表达式语言学习笔记
2012-08-23 21:49 728第十六章:简化对Java代 ... -
servlet和jsp核心编程(第2版)第十五章servlet和JSP的集成,模型-视图-控制器构架
2012-08-23 14:59 737第十五章:servlet和JSP的集成,模型-视图-控制器构架 ... -
servlet和jsp核心编程(第2版)第十四章 JavaBean组件在JSP文档中的应用 学习笔记
2012-08-21 11:55 700第十四章 JavaBean组件在JSP文档中的应用 一、bea ... -
servlet和jsp核心编程(第2版)第十三章 在JSP页面中包含文件和applet学习笔记
2012-08-20 15:53 860第十三章 在JSP页面中包 ... -
servlet和jsp核心编程(第2版)第十二章page指令学习笔记
2012-08-19 17:00 752第十二章 控制所生成的servlet的结构:JSP page指 ... -
servlet和jsp核心编程(第2版)第十一章jsp脚本元素的调用学习笔记
2012-08-18 21:09 813第十一章 用JSP脚本元素 ... -
servlet和jsp核心编程(第2版)第十章jsp技术概述学习笔记
2012-08-18 10:37 684第十章jsp技术概述 学习笔记: 一servlet和jsp的区 ... -
servlet和jsp核心编程(第2版)第九章会话跟踪学习笔记
2012-08-17 17:30 889第九章 会话跟踪 核心 ... -
servlet和jsp核心编程(第2版)第七章服务器响应的生成:HTTP响应报头学习笔记
2012-08-06 17:45 727第七章:服务器响应的 ... -
servlet和jsp核心编程(第2版)第六章服务器响应的生成:HTTP状态代码学习笔记
2012-08-05 10:52 733第六章:服务器响应的生成:HTTP状态代码 核心方法: 1.在 ... -
servlet和jsp核心编程(第2版)第五章客户请求的处理:HTTP请求报头学习笔记
2012-08-02 21:36 700第五章客户请求的处理:HTTP请求报头 核心方法: 1.在使用 ... -
servlet和jsp核心编程(第2版)第四章客户请求的处理,表单数据学习笔记
2012-07-31 16:05 1229第四章学习笔记 客户请 ... -
servlet和jsp核心编程(第2版)第三章servlet基础学习笔记
2012-07-29 10:43 704第三章:servlet基础 核心方法: 1.使用HTML验证器 ...
相关推荐
Servlet与JSP核心编程第二版 PDF文件 高清,内容通俗易懂.
Servlet与JSP核心编程第二版5Servlet与JSP核心编程第二版5Servlet与JSP核心编程第二版5
Servlet与JSP核心编程(第2卷 第2版)
Servlet与JSP核心编程(第二版),你是不是要学最新版本(J2EE1.4)的Servlet和 SP?这本书能让你如虎添翼。你将能很好地掌握Servlet和JSP
Servlet与JSP核心编程:综合介绍Servlet与JSP
Servlet 与 JSP 核心编程(第2版)(含源代码版) Servlet 与 JSP 核心编程(第2版)(含源代码版)
《Servlet与JSP核心编程(第2卷 第2版)》在第l卷的基础上,广泛涉及自定义标签库、过滤器、声明式安全、JSTL和Struts等主题,并沿袭深受读者喜爱的写作风格,通过完整、有效、资料丰富的程序来演绎目前最流行的技术和...
Servlet与JSP核心编程第二版代码
Servlet与JSP核心编程(第2版).pdf
Servlet与JSP核心编程(第2版),与大家分享JSP 开发技术
本书由Marty Hall,Larry Brown著 张学良译 清华大学出版社出版 原书有47M由于上传文件大小限制分为3部分,本人不是黑人,仅仅在最后一个部分才收取4分资源分
《Servlet与JSP核心编程》由浅入深,全面而深入地介绍了servlet和jsp技术。本书重点介绍核心技术,同时对相关的内容,如web服务器的配置、安装和应用,数据库的安装和配置等都做了详细明了的介绍。本书的例子简练...
Servlet与JSP核心编程第二版(含书签)
《Servlet与JSP核心编程》(第2版)叙述详尽,条理清晰。对于初学者来说是一本不可多得的入门书籍,经验丰富的Servelet和JSP开发人员也可以通过阅读《Servlet与JSP核心编程》(第2版)得到巩固和提高。
《Servlet与JSP核心编程(第2卷 第2版)》
servlet与JSP核心编程,这本书我看了,自己做的目录,是高清非扫描版
《Servlet与JSP核心编程》由浅入深,全面而深入地介绍了servlet和jsp技术。本书重点介绍核心技术,同时对相关的内容,如web服务器的配置、安装和应用,数据库的安装和配置等都做了详细明了的介绍。本书的例子简练...
Servlet与JSP核心编程 第2卷.pdf 想学习的同学可以看看
Servlet与JSP核心编程(第2版第1卷、第2卷带书签),java web编程必备基础知识。2本书放一起,方面大家下载学习。