jsp

位置:IT落伍者 >> jsp >> 浏览文章

详细介绍Jsp中的Cookies


发布日期:2022年09月13日
 
详细介绍Jsp中的Cookies

在开发网站应用程序的过程中使用cookie记录用户的一些信息是比较常用的一种方法而cookie的使用也非常简单

Cookie是通过HttpServletResponse的addCookie方法加入到SetCookie应答头中的

例如

Cookie userCookie = new Cookie(user admin

responseaddCookie(userCookie)

和设置有关系的还有以下两个重要方法

setMaxAge

设置Cookie过期之前的时间以秒计如果不设置该值则Cookie只在当前会话内有效而且这些Cookie不会保存到磁盘上

注意删除cookie就是通过该方法实现的将要删除的cookie的过期之前的时间指定为就可以达到删除该cookie的目的

setPath

设置Cookie适用的路径如果不指定路径Cookie将返回给当前页面(jsp(SUN企业级应用的首选)页面或者Servlet的映射)所在目录及其子目录下的所有页面

注意

A所有的cookie都是有路径的

B该方法设置的路径为客户端路径/代表服务器根目录而不是WEB应用根目录

C该方法设置路径时/myWeb//myWeb是不同的要特别注意前者可以关联到服务器的myWeb目录下而后者则不可以

D该方法设置路径时没有相对目录可言即不论在哪个目录下设置setPath(/myWeb/该cookie都将关联到服务器的myWeb目录下(setPath(/myWeb)则不可以)而不是当前目录的myWeb的子目录下同样设置setPath(myWeb/)和setPath(myWeb)也不能关联到当前目录的myWeb的子目录下

这里有个奇怪的例子就是在一个web应用下设置的cookie可以在另一个web应用下获得(两个web应用在同一个服务器下)

目录结构在服务器根目录上有web和web两个目录在web下有setcookiejsp(SUN企业级应用的首选)和getcookiejsp(SUN企业级应用的首选)在web下有getcookiejsp(SUN企业级应用的首选)

web下的setcookiejsp(SUN企业级应用的首选)

<%

Cookie userCookie = new Cookie(user admin

userCookiesetMaxAge(**

userCookiesetPath(/web/

responseaddCookie(userCookie)

%> web下的getcookiejsp(SUN企业级应用的首选)

<%

Cookie[] cookie = requestgetCookies()

String user = new String()

if ( cookie != null )

{ for (int i = ; i < cookielength; i++)

{ Cookie myCookie = cookie[i];

if (myCookiegetName()equals(user))

{ user = myCookiegetValue()

}

}

}

outprintln(user = + user)

%> web下的getcookiejsp(SUN企业级应用的首选)

<% Cookie[] cookie = requestgetCookies()

String user = new String()

if ( cookie != null )

{ for (int i = ; i < cookielength; i++)

{ Cookie myCookie = cookie[i];

if (myCookiegetName()equals(user))

{ user = myCookiegetValue()

}

}

}

outprintln(user = + user)

%>

[nextpage]

先访问web下的setcookiejsp(SUN企业级应用的首选)然后分别访问web和web下面的getcookiejsp(SUN企业级应用的首选)文件你会发现奇怪的现象web下的getcookiejsp(SUN企业级应用的首选)中user为空而web下的getcookiejsp(SUN企业级应用的首选)中user却有值这就实现了从一个web应用下设置的cookie在另一个web应用下获得

大多数人删除cookie不成功都是因为目录原因一个典型的原因是在某一个目录中设置了cookie(没有调用setPath方法)却在另一个目录中删除该cookie(其实是调用setMaxAge方法)

跨域共享cookie的方法设置

cookiesetDomain(

A机所在的域A有应用cas

B机所在的域B有应用webapp_b

)在cas下面设置cookie的时候增加cookiesetDomain(这样在webapp_b下面就可以取到cookie

)这个参数必须以开始

)输入url访问webapp_b的时候必须输入域名才能解析比如说在A机器输入_b可以获取cas在客户端设置的cookie而B机器访问本机的应用输入//localhost:/webapp_b则不可以获得cookie

)设置了cookiesetDomain(还可以在默认的下面共享

读取

从客户端读取Cookie时调用的是HttpServletRequest的getCookies方法该方法返回一个与HTTP请求头中的内容对应的Cookie对象数组得到这个数组之后一般是用循环访问其中的各个元素调用getName检查各个Cookie的名字直至找到目标Cookie然后对这个目标Cookie调用getValue根据获得的结果进行其他处理

注意若jsp(SUN企业级应用的首选)和Servlet所在目录(Servlet为其映射目录)的父目录中有同名cookie则requestgetCookie()方法得到的Cookie数组中保存的是其父目录中的cookie的信息

说明

我们知道对于一个页面中的request和response是一次http请求产生的request是http请求中的所有参数因此包含了发出这次http请求时cookie的值而response是对于这次http请求webapplication产生的反应所以它可以写cookie的值这样看来request得到的cookie的值和response要写的cookie的值可以说是完全不同的

简单地说request得到的cookie的值是在这次http请求之前的cookie的值而response要写得值是这次http请求之后的cookie的值所以在同一个request和response中如果response中增加了新的cookierequest中并不能得到

               

上一篇:JSP常用内置对象

下一篇:JSP中读文件和写文件的例子