文章目录
一、一次可以发送多个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可以共享。
来源:CSDN
作者:郭乾亮1998.
链接:https://blog.csdn.net/weixin_43691058/article/details/104055127