会话技术-cookie的API(十六)

客户端收到cookie之后,下次访问服务器会默认带上cookie。但是,如果客户端重启之后,再次访问服务器,cookie就没有了。

这是因为cookie默认级别是会话级别。如果想让cookie变得更久该怎么办呢?

一、设置Cookie在客户端的持久化时间

cookie.setMaxAge(int seconds); ---时间秒

注意:如果不设置持久化时间,cookie会存储在浏览器的内存中,浏览器关闭 cookie信息销毁(会话级别的cookie),如果设置持久化时间,cookie信息会被持久化到浏览器的磁盘文件里。不同的浏览器的cookie持久化的地方是不一样的。

如果不定义cookie的过期时间,那么cookie 的过期时间就会是会话期间,也就是说,此时的cookie是和sesstion等效的,唯一的不同是此种cookie是存储在客户端的内存中,Session是存储在服务器端的内存中。
不设置expire就是内存cookie,关闭浏览器自动删除。设置expire会在客户端生成cookie文件,过期才会删除。

示例:

cookie.setMaxAge(10*60);

设置cookie信息在浏览器的磁盘文件中存储的时间是10分钟,过期浏览器自动删除该cookie信息

实例:

package com.ken.cookie;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class SendCookieServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		// 1.创建cookie对象
		Cookie cookie = new Cookie("name", "zhangsan");

		// 1.1 为cookie设置持久化时间--------cookie信息在硬盘上保存的时间
		cookie.setMaxAge(50);// 50秒

		// 2.将cookie中存储的信息发送到客户端----头
		response.addCookie(cookie);
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doGet(request, response);
	}
}
首先,我们访问sendCookie这个servlet

会话技术-cookie的API(十六)_第1张图片
会话技术-cookie的API(十六)_第2张图片

我们先关闭浏览器,然后访问静态资源:

cookie的name和value都存在。

过了50秒后,我们访问静态资源:

会话技术-cookie的API(十六)_第3张图片

会话技术-cookie的API(十六)_第4张图片

cookie的name和value不见了

二、设置Cookie的携带路径

cookie.setPath(String path);

注意:如果不设置携带路径,那么该cookie信息会在访问产生该cookie的web资源所在的路径都携带cookie信息

示例:

cookie.setPath("/WEB16");

代表访问WEB16应用中的任何资源都携带cookie

cookie.setPath("/WEB16/cookieServlet");

代表访问WEB16中的cookieServlet时才携带cookie信息

实例:

package com.ken.cookie;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class SendCookieServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		// 1.创建cookie对象
		Cookie cookie = new Cookie("name", "zhangsan");

		// 1.1 为cookie设置持久化时间--------cookie信息在硬盘上保存的时间
		cookie.setMaxAge(50);// 50秒

		// 1.2为cookie设置携带的路径
		cookie.setPath("/cookieDemo/sendCookie");// 访问sendCookie资源时才携带这个cookie

		// 2.将cookie中存储的信息发送到客户端----头
		response.addCookie(cookie);
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doGet(request, response);
	}
}

先访问sendCookie

会话技术-cookie的API(十六)_第5张图片
会话技术-cookie的API(十六)_第6张图片

再访问静态资源:

会话技术-cookie的API(十六)_第7张图片

会话技术-cookie的API(十六)_第8张图片

再访问sendCookie:

会话技术-cookie的API(十六)_第9张图片

package com.ken.cookie;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class SendCookieServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		// 1.创建cookie对象
		Cookie cookie = new Cookie("name", "zhangsan");

		// 1.1 为cookie设置持久化时间--------cookie信息在硬盘上保存的时间
		cookie.setMaxAge(50);// 50秒

		// 1.2为cookie设置携带的路径
		cookie.setPath("/cookieDemo/sendCookie");// 访问sendCookie资源时才携带这个cookie
		// cookie.setPath("/cookieDemo");// 访问cookieDemo下的任何资源都才携带这个cookie
		// cookie.setPath("/");// 访问服务器下的任何资源都才携带这个cookie

		// 2.将cookie中存储的信息发送到客户端----头
		response.addCookie(cookie);
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doGet(request, response);
	}
}

三、删除客户端的cookie:

如果想删除客户端的已经存储的cookie信息,那么就使用同名同路径的持久化时间为0的cookie进行覆盖即可


你可能感兴趣的:(Servlet)