读书人

Cookie引见和应用

发布时间: 2012-12-19 14:13:14 作者: rapoo

Cookie介绍和应用

在Servlet中显示地设置和读取Cookie

一,什么是Cookie???

???? Cookie是Web服务器利用set-cookie响应报头发送给客户端的一段消息。客户端在随后的请求中返回给服务器,服务器可以读取(而不可以改变)该消息。??

???? Cookie不会以任何方式得到解释和执行,以名-值对的显示保存消息,服务器通过再次发送修改后的cookie来改变cookie。?

?浏览器对Cookie大小和数量有限制。

二,Cookie的优点和缺点??

????在Servlet或JSP中避免使用Cookie存储敏感数据。?用户可能选择关闭Cookie(那就使用URL重写),因此尽可能地不依赖于Cookie。 ?如果可以在禁用Cookie情况下为用户提供合理的功能,那就这样做。

????1,Cookie的优点???

???????? 在电子商务会话中标识用户,使用servlet提供的专用于会话跟踪的API :javax.servlet.http.Cookie; ??记录用户名和密码,相对于安全性要求比较低的站点。???

???????? 定制站点:???

???????? ??? 对于简单页面设置,使用Cookie记录用户的喜好,直接将页面的设置存储在Cookie中完成定制。????

????????????? 对于复杂页面设置,使用Cookie将唯一标识发送给用户,由服务器端的数据库存储与每个标识符对应的页面设置。???

??????? 定向广告:????

????????????? 首次访问不存在相应的Cookie和搜索的东西不和任何广告分类匹配时,网站显示随机广告。 ???有Cookie情况下,通过记录用户搜索内容,识别用户兴趣,在页面上显示定向的广告。??

??? 2,Cookie的缺点???

??????????对用户隐私造成极大威胁。比方搜索记录 ??Cookie数据的共享,将Cookie与图片关联。二个网站可以通过相同的第三方网站载入图片,共享用户的相关数据。??

三,Cookie的发送和读取??

?????? Servlet使用javax.servlet.http.Cookie类封装Cookie信息。??使用HttpServletResponse来读取Cookie信息。????

?????? (1),向客户端发送Cookie???

?????????????? 1,创建Cookie对象。?????

??????????????????????? 使用Cookie构造函数创建一个Cookie实例。给出字符串:Cookie的名和Cookie的值。名和值不能包含某些特殊字符。??????

?????????????? 2,获取和设置Cookie在客户端最大保存时间。将会话级别的Cookie存储在客户端中。 ?????????????????????? ?getMaxAge和setMaxAge方法。以秒为单位。??设置为负值表示为会话级别cookie,让客户端浏览器在会话结束后删除该Cookie。?设置为0 则指示浏览器删除该cookie;但实际不是这样,所以设置为1更好!??

????????????? ?3,将Cookie插入到HTTP响应报头中。

????????????????????? 如同前面一样,任何响应报头必须在任何文档发送到客户端之前设置。 ???使用response.addCookie方法创建新的set-cookie响应报头,不修改之前的请求报头中的set-cookie报头。??

???????(2)从客户端读取Cookie???

??????????????1,使用request.getCookie,返回Cookie对象数组,没有则返回null。???????

?????????????? 2,循环Cookie对象数组,调用getName找到需要的cookie,然后调用getValue方法来获取cookie值。???

?四,Cookie的属性??

???????????属性是从服务器发送到浏览器的响应报头的一部分,但它不属于由浏览器发送返回给服务器的请求报头。 ?所以cookie属性只只用于服务器发送到客户端的cookie;对于来自客户端的cookie并没有这些属性。 ?也就是说我们只可以在服务器端操作cookie属性,将cookie发送给客户端。而从客户端来的cookie中的属性不可操作。????

??????????? 使用cookie.setXxx和getXxx方法来设置和获取属性,Xxx为属性的名字。???

??????????? 1,setDomain(String domainPattern)和getDomain():设置和读取cookie适用的域。??

??????????????????? ?一般cookie返回给主机名与发送该cookie的主机名完全相同的主机。如果需要返回给其他主机,使用该方法设置指定的域。 ??域必须以点号开始。对于非国家域,必须包含2个点号。对于国家域必须包含3个点号。????

????????????2,setMaxAge(int lifeTime)和getMaxAge():设置和获取cookie的最大保存时间,秒为单位,默认为负值。?设置为负值表示为会话级别cookie,让客户端浏览器在会话结束后删除该Cookie。 ??注意设置为0 则理论上指示浏览器删除该cookie;但实际不是这样,所以设置为1更好!????

???????????? 3,getName:获取cookie的名称。 ??cookie创建之后不能改变它的名称。???

??????????? ?4,setValue(String cookieValue)和getValue():设置和获取cookie的值 ??setValue一般用于改变输入cookie的值,并将它们发送出去。

???????????? 5,setPath(String path)和getPath():设置和获取cookie的路径;如果没有指定一个路径,浏览器只将该cookie返回给发送cookie的页面所在“目录”中或之下的URL。 ??cookie.setPath("/")指定网站上的所有URL都应该接收该cookie。????

????????????6,setSecure(boolean secureFlag)和getSecure():设置或获取布尔值表示cookie是否通过加密来连接。默认false。

五,使用Cookie区别初访者和再访者??

????????检查唯一命名的Cookie是否存在:如果存在则为初访者;如果不存在该Cookie则为再访者,并设置输出Cookie。 ?不能仅因为Cookie数组为null就认为用户为初访者,数组非空也可能为初访者。 ?必须遍历Cookie数组,检查比较Cookie名和值和预期是否一致。如果不一致则添加Cookie,显示为初访者准备的信息;如果一致则显示再访者的信息。

六,会话Cookie和持久Cookie??

????????? 设置和获取cookie的最大保存时间,设置为负值表示为会话级别cookie.设置为正整数表示为持久级别cookie????

七,使用Cookie记录用户简单信息??

?????????对于简单的用户信息,可以直接将信息记录在Cookie中。 ?对于复杂的用户信息,在Cookie中存储用户的唯一标识,而把用户信息存储在数据库中。

???????? 1,记录用户名,在指定的时间内自动登陆。当用户使用该用户名进行操作的时候,要在服务器端要对返回的cookie做检查。??

?????????2,定制站点: ??对于简单页面设置,使用Cookie记录用户的喜好,直接将页面的设置存储在Cookie中完成定制。 ??对于复杂页面设置,使用Cookie将唯一标识发送给用户,由服务器端的数据库存储与每个标识符对应的页面设置。

八,客户端获取Cookie的脚本代码?

view plaincopy to clipboardprint?
  1. function?getCookie(parameter)??
  2. ??
  3. {??
  4. ??
  5. ????????var?reg,allCookie,allCookie2,iLen,iStart,iEnd;??
  6. ??
  7. ????????allCookie?=?document.cookie;??
  8. ??
  9. ????????reg?=?new?RegExp(parameter);??
  10. ??
  11. ????????if((allCookie.search(reg)?==?-1)||(allCookie.indexOf(parameter+"=")<0))??
  12. ??
  13. ????????{??
  14. ??
  15. ????????????return?"";??
  16. ??
  17. ????????}??
  18. ??
  19. ????????else??
  20. ??
  21. ????????{??
  22. ??
  23. ????????????iLen?=?parameter.length;??
  24. ??
  25. ????????????iStart?=?allCookie.search(reg)?+?iLen?+1;??
  26. ??
  27. ????????????allCookie2?=?allCookie.substr(iStart);??
  28. ??
  29. ????????????iEnd?=?iStart?+?allCookie2.search(/;/i);????
  30. ??
  31. ????????????if((iStart?-?1)?==?iEnd){??
  32. ??
  33. ????????????????return?allCookie.substr(iStart);??
  34. ??
  35. ????????????}??
  36. ??
  37. ????????????else{??
  38. ??
  39. ????????????????return?allCookie.substr(iStart,iEnd?-?iStart);??
  40. ??
  41. ????????????}??
  42. ??
  43. ????????}??
  44. ??
  45. }

读书人网 >编程

热点推荐