例如:
- Cookie userCookie = new Cookie("user", "admin");
- response.addCookie(userCookie);
设置Cookie过期之前的时间,以秒计。如果不设置该值,则Cookie只在当前会话内有效,而且这些Cookie不会保存到磁盘上。 注意:删除cookie就是通过该方法实现的。将要删除的cookie的过期之前的时间指定为0就可以达到删除该cookie的目的。 2.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应用在同一个服务器下)
目录结构:在服务器根目录上有web1和web2两个目录,在web1下有setcookie.jsp(SUN企业级应用的首选)和getcookie.jsp(SUN企业级应用的首选)、在web2下有getcookie.jsp(SUN企业级应用的首选) web1下的setcookie.jsp(SUN企业级应用的首选)
- <%
- Cookie userCookie = new Cookie("user", "admin");
- userCookie.setMaxAge(24*60*60);
- userCookie.setPath("/web2/");
- response.addCookie(userCookie);
- %>
- <%
- Cookie[] cookie = request.getCookies();
- String user = new String();
- if ( cookie != null ) {
- for (int i = 0; i < cookie.length; i++) {
- Cookie myCookie = cookie[i];
- if (myCookie.getName().equals("user")) {
- user = myCookie.getValue();
- }
- }
- }
- out.println("user = " + user);
- %>
- web2下的getcookie.jsp(SUN企业级应用的首选)
- <%
- Cookie[] cookie = request.getCookies();
- String user = new String();
- if ( cookie != null ) {
- for (int i = 0; i < cookie.length; i++) {
- Cookie myCookie = cookie[i];
- if (myCookie.getName().equals("user")) {
- user = myCookie.getValue();
- }
- }
- }
- out.println("user = " + user);
- %>
- cookie.setDomain(".jszx.com");
从客户端读取Cookie时调用的是HttpServletRequest的getCookies方法。该方法返回一个与HTTP请求头中的内容对应的Cookie对象数组。得到这个数组之后,一般是用循环访问其中的各个元素,调用getName检查各个Cookie的名字,直至找到目标Cookie。然后对这个目标Cookie调用getValue,根据获得的结果进行其他处理。 注意:若jsp(SUN企业级应用的首选)和Servlet所在目录(Servlet为其映射目录)的父目录中有同名cookie,则request.getCookie()方法得到的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中增加了新的cookie,request中并不能得到。 【编辑推荐】
- jsp开发技术应用的29个注意事项
- JSP虚拟主机使用中的乱码问题
- jsp速度优化七种方法
- 详细了解JSP中九个隐含对象
- 详细介绍JSP技术的两种架构模型