Cookie的几个细节

给你一囗甜甜゛ 提交于 2020-01-21 00:46:23


一、一次可以发送多个Cookie吗?

可以创建多个Cookie对象, 使用response调用多次addCookie方法发送Cookie即可。

(1)演示一次发送多个Cookie。

创建两个Servlet,Demeo3用来发送两个Cookie,Demo2来接收。可以成功使用。

但需要注意:当Cookie的名字相同时,会出现Cookie值覆盖的情况。

package com.ql.cookie;

import java.io.IOException;

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

/**
 * 类说明:
 * 		一次发送多个Cookie.
 * @author qianliangguo
 */

@WebServlet("/CookieDemo3")
public class CookieDemo3 extends HttpServlet {

	@Override
	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		//1.创建Cookie
		Cookie c1 = new Cookie("msg","hello");
		Cookie c2 = new Cookie("name","word");
		//2.发送Cookie
		response.addCookie(c1);
		response.addCookie(c2);
	}
	
	@Override
	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		this.doPost(request, response);
	}
}
package com.ql.cookie;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 类说明:
 * 		本类用来接收Cookie
 * @author qianliangguo
 */

@WebServlet("/CookieDemo2")
public class CookieDemo2 extends HttpServlet {

	@Override
	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		//3.获取Cookie
		Cookie[] cs = request.getCookies();
			//获取数据,遍历Cookies
			if(cs!= null){
				for (Cookie c : cs) {
					String name = c.getName();
					String value = c.getValue();
					System.out.println(name+":"+value);
				}
			}
	}
	
	@Override
	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		this.doPost(request, response);
	}
}

在这里插入图片描述

二、Cookie在浏览器中能保存多长时间?

(1)Cookie存储在内存

默认情况下,Cookie存储在浏览器内存,当浏览器关闭后,Cookie数据被销毁。

(2)Cookie存储在硬盘

持久化存储,使用setMaxAge(int seconds)方法。

  • 正数:将Cookie数据写到硬盘的文件中。second秒后自动删除。
  • 负数:默认值。
  • 零:删除Cookie信息。

持久化存储的步骤

①创建Cookie

	Cookie c1 = new Cookie("msg","hello");

②设置Cookie的存活时间

	c1.setMaxAge(30);//将Cookie持久化到硬盘文件中,30秒后自动删除
	c1.setMaxAge(30);//将Cookie持久化到硬盘文件中,30秒后自动删除

③发送Cookie

	response.addCookie(c1);

三、Cookie能不能存储中文?

在tomcat8之后,Cookie支持中文数据。之前的版本会报错500。

tomcat8之前,如果用Cookie存储中文,需要将中文数据转码,一般采用URL编码

四、Cookie共享问题?

(1)假设在一个tomcat服务器中,部署了多个web项目,那么在这些web项目中Cookie能不能共享?

①默认情况,Cookie不能共享
setPath(String path):设置Cookie的获取范围,默认设置为当前的虚拟目录。

②在整个web项目内共享setPath("/");

如果要共享,可以将path设置为"/"。

(2)不同的tomcat服务器之间Cookie共享问题?

setDomain(String path):如果设置一级域名相同,那么多个服务器之间Cookie可以共享。

例如:setDomain(".baidu.com"),那么tieba.baidu.com和news.baidu.com中Cookie可以共享。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!