您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > 第6章--使用Cookie记录信息
第6章使用Cookie记录信息本章学习目标:了解Cookie的基本概念掌握在JSP中创建Cookie的方法掌握在JSP中读写Cookie的方法掌握设置Cookie存在期限的方法了解Cookie的安全问题6.1Cookie的概念和特性6.2在JSP中使用Cookie6.3Cookie对象的应用实例6.4Cookie的安全问题6.1Cookie的概念和特性Cookie是设计交互式网页的一项重要技术,它可以将一些简短的数据存储在用户的计算机上,这些存放在用户计算机上的变量数据,称为Cookie。当浏览器向服务器提出网页浏览请求时,服务器根据存储在用户计算机上面的Cookie内容,针对此浏览器显示其专门的内容。6.1.1什么是CookieCookie是服务器发送给浏览器的体积非常小的纯文本信息,用户以后访问同一个Web服务器时浏览器会把他们原样发送给服务器。通过让服务器读取他原先保存到客户端的信息,网站能够为浏览者提供一系列的方便,例如在线交易过程中标识用户身份、安全需求不高的场合避免用户重复输入名字和密码、门户网站的主页制定、有针对性地投放广告,等等。Cookie数据存储的功能由浏览器本身所提供,因此Cookie功能都必须要有浏览器的支持才行,一般通用的浏览器,例如IE都支持此功能。当用户打开的网页中包含Cookie程序代码,此时服务器端会建立Cookie数据,然后将这个Cookie传送到客户端用户的计算机上。储存Cookie服务器浏览器响应返回Cookie请求客户端CookieCookie示意图76.1.2Cookie的常见用途Cookie的常见用途如:(1)网站浏览人数管理(2)按照用户的喜好定制网页外观(3)在电子商务站点中实现诸如“购物篮”等功能Cookies给网站和用户带来的好处非常多:Cookie能使站点跟踪特定访问者的访问次数、最后访问时间和访问者进入站点的路径。Cookie能告诉在线广告商广告被点击的次数,从而可以更精确的投放广告。Cookie有效期限未到时,Cookie能使用户在不键入密码和用户名的情况下进入曾经浏览过的一些站点。Cookie能帮助站点统计用户个人资料以实现各种各样的个性化服务。6.1.3对Cookie进行适当设置6.2在JSP中使用Cookie6.2.1创建CookieCookie是由Javax.servlet.http.Cookie类所衍生出来的对象,建立Cookie的语法如下:CookieobjCookie=newCookie(indexValue,stringValue)从上面的语法中可以看出,一个Cookie对象必须包含有一个特定的indexValue索引值与字符串类型的数据内容stringValue。例如:Cookiec=newCookie(mycookie,CookieTest);建立了Cookie之后,该Cookie数据还必须传送到客户端,用addCookie方法发送一个HTTPHeader。传送的方式为:response.addCookie(objCookie)。6.2.2读写Cookie1.写Cookie对Cookie进行操作首先是将Cookie保存到客户端。在JSP编程中,利用response对象,通过addCookie方法将Cookie写入客户端。语法如下:response.addCookie(cookie);例如:%//从提交的HTML表单中获取用户名Stringusername=request.getParameter(name);Cookieuser_name=newCookie(cookie_name,username);//创建一个Cookieresponse.addCookie(user_name);%2.读Cookie将Cookie保存到客户端,就是为了以后得到其中保存的数据。调用HttpServletRequest的getCookies得到一个Cookie对象的数组语法如下:Cookie[]数组变量名=request.getCookies();在客户端传来的Cookie数据类型都是数组类型,因此要得到其中某一项指定的Cookie对象,需要遍历数组来找。%Cookie[]Cookies=request.getCookies();//创建一个Cookie对象数组if(Cookies=nullout.print(noneanyCookie);else{for(inti=0;iCookies.length;i++){//设立一个循环,来访问Cookie对象数组的每一个元素if(Cookies[i].getName().equals(cookie_name))//判断元素的值是否为username中的值out.println(Cookies[i].getValue()+br);}}%6.2.3Cookie中的主要方法类型方法名方法解释StringgetComment()返回cookie中注释,如果没有注释的话将返回空值.StringgetDomain()返回cookie中Cookie适用的域名.使用getDomain()方法可以指示浏览器把Cookie返回给同一域内的其他服务器,而通常Cookie只返回给与发送它的服务器名字完全相同的服务器。注意域名必须以点开始(例如.yesky.com)intgetMaxAge()返回Cookie过期之前的最大时间,以秒计算。StringgetName()返回Cookie的名字。名字和值是我们始终关心的两个部分StringgetPath()返回Cookie适用的路径。如果不指定路径,Cookie将返回给当前页面所在目录及其子目录下的所有页面。booleangetSecure()如果浏览器通过安全协议发送cookies将返回true值,如果浏览器使用标准协议则返回false值。StringgetValue()返回Cookie的值。intgetVersion()返回Cookie所遵从的协议版本。voidsetComment(Stringpurpose)设置cookie中注释。voidsetDomain(Stringpattern)设置cookie中Cookie适用的域名voidsetMaxAge(intexpiry)以秒计算,设置Cookie过期时间。voidsetPath(Stringuri)指定Cookie适用的路径。voidsetSecure(booleanflag)指出浏览器使用的安全协议,例如HTTPS或SSL。voidsetValue(StringnewValue)cookie创建后设置一个新的值。voidsetVersion(intv)设置Cookie所遵从的协议版本。例如,设置Cookie变量的有效周期的语法如下:Cookie变量名称.setMaxAge(有效周期);有效周期的时间以秒为单位,时间设置越大,表示Cookie对象的有效时间越长。Cookiecookie=newCookie(“username”,”liuyongpo”);Cookie.setMaxAge(30*60);//设置Cookie的存活时间为30分钟response.addCookie(cookie);6.2.4几个操作Cookie的常用方法1.设置Cookie的存在期限Cookie在生成时就会被指定一个Expire值,这就是Cookie的生存周期,在这个周期内Cookie有效,超出周期Cookie就会被清除。有些页面将Cookie的生存周期设置为0或负值,这样在关闭页面时,就马上清除Cookie,不会记录用户信息,更加安全。在默认情况下,Cookie是随着用户关闭浏览器而自动消失的,不过,Cookie也可以设置其存在的期限,让用户下次在打开网页时,服务器端仍然能够取得同样一个Cookie中的数据内容。下面的代码,使用setMaxAge()方法,设置Cookie对象login在一天之内都为有效:%Cookielogin=newCookie(today,true);login.setMaxAge(86400);response.addCookie(login);%自动保存的Cookiepackagech08;importjavax.servlet.http.*;publicclassLongLivedCookieextendsCookie{publicstaticfinalintSECONDS_PER_YEAR=60*60*24*365;publicLongLivedCookie(Stringname,Stringvalue){super(name,value);setMaxAge(SECONDS_PER_YEAR);}}2.删除CookieCookiekillMyCookie=newCookie(mycookie,null);killMyCookie.setMaxAge(0);killMyCookie.setPath(/);response.addCookie(killMyCookie);3.获取指定名字的Cookie值publicstaticStringgetCookieValue(Cookie[]cookies,StringcookieName,StringdefaultValue){for(inti=0;i<cookies.length;i++){Cookiecookie=cookies[i];if(cookieName.equals(cookie.getName()))return(cookie.getValue());}return(defaultValue);}6.3Cookie对象的应用实例【例6-1】在JSP中使用Cookie【例6-2】应用Cookie保留用户提交的信息jsessionid就是客户端用来保存sessionid的变量,一般对于web应用来说,客户端变量都会保存在Cookie中,jsessionid也不例外。不过与一般的Cookie变量不同,jsessionid是保存在内存Cookie中的,在一般的Cookie文件中是看不到。内存Cookie在打开一个浏览器窗口的时候会创建,在关闭这个浏览器窗口的时候也同时销毁。这也就解释了为什么session变量不能跨窗口使用,要跨窗口使用就需要手动把jsessionid保存到Cookie里面。只有通过jsessionid才能使session机制起作用,而jsessionid又是通过Cookie来保存。如果用户禁用了Cookie,我们可以通过url重写来实现jsessionid的传递。jessionid通过这样的方式来从客户端传递到服务器端,从而来标识session。这样在用户禁用cookie的时候我们也可以传递jsessionid来使用session了,只不过需要每次都把jsessionid作为参数跟在url后面传递。那这样岂不是很麻烦,每次请求一个url都要判断Cookie是否可用,如果禁用了Cookie,还要从url里解析出jsessionid,然后跟在处理完后转到的url后面,以保持jsessionid的传递。这些问题sun当然已经帮我们想到了,所以提供了2个方法来使事情变得简单:response.encodeURL()和response.encodeRedirectURL()。这2个方法会判断Cookie是否可用,如果禁用了会解析出url中的jsessionid,并连接到指定的url后面,如果没有找到jsessionid会自动帮我们生成一个。这2个方法在判断是否要包含jsessionid的逻辑上会稍有不同。在调用response.sendRedirect前,应该先调用response.encodeURL()或encodeRedirectURL()方法,否则可能会丢失Sesssion信息
本文标题:第6章--使用Cookie记录信息
链接地址:https://www.777doc.com/doc-4329345 .html