1、一次可以发送多个cookie

HTTP响应头中可以设置多个Cookie信息,从而一次可以发送多个Cookie。

在设置多个Cookie时,可以在Set-Cookie字段中通过分号(;)进行分割,每个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 SendMultipleCookies extends HttpServlet {

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        Cookie cookie1 = new Cookie("name1", "value1");  // 创建第一个Cookie信息
        cookie1.setPath("/");  // 设置第一个Cookie的作用范围为整个站点
        Cookie cookie2 = new Cookie("name2", "value2");  // 创建第二个Cookie信息
        cookie2.setPath("/");  // 设置第二个Cookie的作用范围为整个站点
        response.addCookie(cookie1);  // 将第一个Cookie添加到响应头
        response.addCookie(cookie2);  // 将第二个Cookie添加到响应头
        response.setContentType("text/html;charset=UTF-8");  // 设置响应内容类型
        response.getWriter().write("Hello World!");  // 设置响应体内容
    }

}

上述代码中,使用Java内置的javax.servlet.http.Cookie类创建了两个新的Cookie信息并设置了它们的名称和值。然后,使用setPath()方法将这两个Cookie的作用范围设置为整个站点。最后,将这两个Cookie添加到响应头中,并发送给客户端。

需要注意的是,同一个请求中可以包含多个Cookie信息,每个Cookie信息以分号和一个空格分隔,例如:

Set-Cookie: name1=value1; Path=/
Set-Cookie: name2=value2; Path=/

2、保存时间

Cookie的保存时间是通过设置Cookie的setMaxAge()方法来控制的。这个方法接受一个整数参数,表示Cookie的最大存活时间,单位为秒。当设置为正整数时,表示Cookie可以被保存到客户端的硬盘上,直到超过指定的最大存活时间;当设置为负整数时,表示Cookie只会保存在浏览器内存中,关闭浏览器就会失效;当设置为0时,表示立即删除Cookie。

下面是一个Java的完整代码示例,并使用javax.servlet.http.Cookie类创建了一个新的Cookie信息,并将这个Cookie添加到响应头中发送给客户端,并设置Cookie的最大存活时间为1天:

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 SetCookieWithMaxAge extends HttpServlet {

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        Cookie cookie = new Cookie("name", "value");  // 创建新的Cookie信息
        cookie.setMaxAge(86400);  // 设置Cookie的最大存活时间为1天
        cookie.setPath("/");  // 设置Cookie的作用范围为整个站点
        response.addCookie(cookie);  // 将Cookie添加到响应头
        response.setContentType("text/html;charset=UTF-8");  // 设置响应内容类型
        response.getWriter().write("Hello World!");  // 设置响应体内容
    }

}

上述代码中,首先使用Java内置的javax.servlet.http.Cookie类创建了一个新的Cookie信息,并设置它的名称和值。然后,使用setMaxAge()方法将这个Cookie的最大存活时间设置为1天,表示Cookie可以在客户端保存一天时间。最后,将这个Cookie添加到响应头中,并发送给客户端。

需要注意的是,服务器和客户端之间的时区可能存在差异,因此,在设置Cookie的最大存活时间时,最好尽量使用标准时间,并且根据实际情况进行适当的调整。

另外,需要注意的是,浏览器对Cookie的支持有一定的限制,不同浏览器对Cookie的存储大小、数量、存活时间等方面都可能有所不同。为确保兼容性,建议在设计Web应用程序时尽量避免过多依赖Cookie。

 3、cookie可以存储中文数据

在设置Cookie的值时,可以直接将中文字符串赋给Cookie的value属性即可。对于服务器来说,在发送Cookie时会自动进行URL编码,以确保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 SetCookieWithChineseValue extends HttpServlet {

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        Cookie cookie = new Cookie("name", "中文");  // 创建新的Cookie信息,并设置中文字符串作为其值
        cookie.setPath("/");  // 设置Cookie的作用范围为整个站点
        response.addCookie(cookie);  // 将Cookie添加到响应头
        response.setContentType("text/html;charset=UTF-8");  // 设置响应内容类型
        response.getWriter().write("Hello World!");  // 设置响应体内容
    }

}

上述代码中,通过把中文字符串"中文"赋给Cookie的value属性来存储中文数据。在发送Cookie时,服务器会自动进行URL编码,以确保Cookie值中的中文字符能够正确地传递给客户端,并在必要时进行自动解码。因此,客户端收到的Cookie值是经过编码的字符串。

在处理Cookie值时,服务器和客户端必须使用相同的字符编码方式,否则会出现乱码问题。为避免这种情况发生,建议在设置响应头时指定字符编码方式。

4、共享数据

Cookie的获取范围是由Cookie对象的setDomain()、setPath()和setSecure()方法来控制的。

  • setDomain()方法:设置Cookie的作用域,即指定哪些域名下的页面可以访问该Cookie。

如果不调用setDomain()方法,则默认为当前请求的域名。
如果调用了setDomain()方法,则只有在满足该方法所设置的域名要求时,才能够访问该Cookie。

例如,如果将作用域设置为".example.com",则只有在".example.com"和其子域名下的页面才能够访问该Cookie。

  • setPath()方法:设置Cookie的访问路径,即指定哪些路径下的页面可以访问该Cookie。

如果不调用setPath()方法,则默认为当前请求的路径。
如果调用了setPath()方法,则只有在满足该方法所设置的路径要求时,才能够访问该Cookie。例如,如果将路径设置为"/example",则只有在"/example"及其子路径下的页面才能够访问该Cookie。

  • setSecure()方法:设置Cookie是否需要通过安全连接发送。如果将其设置为true,则只有当请求使用HTTPS协议时才会发送该Cookie。

需要注意的是,如果在创建Cookie时没有指定作用域和访问路径,则默认为当前请求的域名和路径。

下面是一个Java的完整代码示例,并使用javax.servlet.http.Cookie类创建了一个新的Cookie信息,并将这个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 SetCookieWithScope extends HttpServlet {

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        Cookie cookie = new Cookie("name", "value");  // 创建新的Cookie信息
        cookie.setDomain(".example.com");  // 设置Cookie的作用域为".example.com"
        cookie.setPath("/example");  // 设置Cookie的访问路径为"/example"
        response.addCookie(cookie);  // 将Cookie添加到响应头
        response.setContentType("text/html;charset=UTF-8");  // 设置响应内容类型
        response.getWriter().write("Hello World!");  // 设置响应体内容
    }

}

上述代码中,通过调用setDomain()方法将Cookie的作用域设置为".example.com",即只有在".example.com"及其子域名下的页面才能够访问该Cookie;同时,通过调用setPath()方法将Cookie的访问路径设置为"/example",即只有在"/example"及其子路径下的页面才能够访问该Cookie。

更多推荐