详细了解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
- <%@pagecontentType="text/html;charset=ISO8859_1"%>
- <%
- Cookie_cookie=newCookie("user_delfancom","delfan");
- _cookie.setMaxAge(30*60);//设置Cookie的存活时间为30分钟
- response.addCookie(_cookie);//写入客户端硬盘
- out.print("写Cookie完成");
- %>
2.读取Cookie.jsp---readcookie.jsp
- <%
- Cookiecookies[]=request.getCookies();//将适用目录下所有Cookie读入并存入cookies数组中
- CookiesCookie=null;
- Stringsname=null;
- Stringname=null;
- if(cookies==null)//如果没有任何cookie
- out.print("noneanycookie");
- else
- {
- out.print(cookies.length+"
- ");
- for(inti=0;i{
- sCookie=cookies[i];
- sname=sCookie.getName();
- name=sCookie.getValue();
- out.println(sname+"->"+name+"
- ");
- }
- }
- %>
需要注意的两个JSP特点的问题:
1.Cookie有个适用路径的问题,就是说如果writecookie.jsp和readcookie.jsp要放在同意目录下,如果不在同一目录下,则写的时候需要设置路径,为readcookie.jsp所在的路径.
2.读入Cookie数组的时候需要判断是否为空(null),网上很多代码都没有写出这一点.