转载

详细了解JSP特点之Cookie

详细了解JSP特点之Cookie

大家都传说Cookie会造成严重的安全威胁什么的,其实不是这么回事情.服务器读取Cookie的时候,只能够读取到这个服务器相关的信息.而且,浏览器一般只允许存放300个Cookie,每个站点最多存放20个,而且,每个Cookie的大小现在在4K,根本不会占用多少空间.并且,Cookie是有时效性质的.例如,设置了Cookie的存活时间为1分钟,则一分钟后这个Cookie就会被浏览器删除

1.服务器可以向客户端写内容

2.只能是文本内容,且大小为4K(安全)

3.客户端可以阻止服务器写入

4.只能拿自己webapp写入的东西(安全)

5.Cookie分为两种

a.属于窗口/子窗口(放在内存中),窗口一关闭,即Cookie内容失效

b.写在本地磁盘的文本(有生命周期)

6.一个servlet/jsp设置的cookie能够被同一个路径下面或者子路径下面的servlet/jsp读到(路径=url)

(路径!=真实文件路径)

也就是说,子路径下生成的cookie,父路径不能读取

父路径生成的cookie,子路径能读取

JSP中对Cookie的操作:类型方法名方法解释

StringgetComment()返回cookie中注释,如果没有注释的话将返回空值.

StringgetDomain()返回cookie中Cookie适用的域名.使用getDomain()方法可以指示浏览器把Cookie返回给同一域内的其他服务器,而通常Cookie只返回给与发送它的服务器名字完全相同的服务器。注意域名必须以点开始

intgetMaxAge()返回Cookie过期之前的最大时间,以秒计算。

StringgetName()返回Cookie的名字

StringgetPath()返回Cookie适用的路径。如果不指定路径,Cookie将返回给当前页面所在目录及其子目录下的所有页面。

booleangetSecure()如果浏览器通过安全协议发送cookies将返回true值,如果浏览器使用标准协议则返回false值。

StringgetValue()返回Cookie的值。笔者也将在后面详细介绍getValue/setValue。

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所遵从的协议版本

一个简单的例子

1.写入Cookie---writecookie.jsp

  1. <%@pagecontentType="text/html;charset=ISO8859_1"> 
  2. <%  
  3. Cookie_cookie=newCookie("user_delfancom","delfan");  
  4. _cookie.setMaxAge(30*60);//设置Cookie的存活时间为30分钟  
  5. response.addCookie(_cookie);//写入客户端硬盘  
  6. out.print("写Cookie完成");  
  7. > 

2.读取Cookie.jsp---readcookie.jsp

  1. <%  
  2. Cookiecookies[]=request.getCookies();//将适用目录下所有Cookie读入并存入cookies数组中  
  3. CookiesCookie=null;  
  4. Stringsname=null;  
  5. Stringname=null;  
  6. if(cookies==null)//如果没有任何cookie  
  7. out.print("noneanycookie");  
  8. else  
  9. {  
  10. out.print(cookies.length+"  
  11. ");  
  12. for(inti=0;i{  
  13. sCookie=cookies[i];  
  14. sname=sCookie.getName();  
  15. name=sCookie.getValue();  
  16. out.println(sname+"->"+name+"  
  17. ");  
  18. }  
  19. }  
  20. > 

需要注意的两个JSP特点的问题:

1.Cookie有个适用路径的问题,就是说如果writecookie.jsp和readcookie.jsp要放在同意目录下,如果不在同一目录下,则写的时候需要设置路径,为readcookie.jsp所在的路径.

2.读入Cookie数组的时候需要判断是否为空(null),网上很多代码都没有写出这一点.

正文到此结束
Loading...