设置种session的范围

设置种session的范围

共享 Cookie 是在多个子域之间实现状态或数据共享的常见需求。例如,在一个公司的多个子网站之间(如 sub1.example.comsub2.example.com)共享用户的登录状态。
在 HTTP 协议中,Cookie 是通过域名和路径来确定其作用范围的。当服务器向客户端发送一个 Cookie 时,可以指定 Cookie 的 Domain 属性。浏览器会根据这个属性来决定 Cookie 是否在特定域名或子域名下发送。

为了使多个子域共享一个 Cookie,可以将 Cookie 的 Domain 属性设置为一个更高层的公共域名,例如将 sub1.example.comsub2.example.com 的 Cookie 设置为 example.com。这样做的好处在于:

  1. 共享状态: 用户在一个子域登录后,在其他子域也可以保持登录状态,不需要再次登录。
  2. 统一管理: 可以通过一个公共域名来统一管理和操作 Cookie,简化了操作和维护。

以下是设置共享 Cookie 的示例代码:

1
2
3
4
5
Cookie cookie = new Cookie("username", "john");
cookie.setDomain(".example.com"); // 设置公共域名
cookie.setPath("/"); // 设置路径范围为整个站点
cookie.setMaxAge(60 * 60 * 24); // 设置有效期为1天
response.addCookie(cookie);

在这个例子中,Cookie 的 Domain 设置为 .example.com(注意前面的点),这样所有 example.com 及其子域(如 sub1.example.comsub2.example.com)都可以访问这个 Cookie。

在SpringBoot中配置

在 Spring Boot 3 中,可以使用更简洁的方法通过配置属性来共享 Cookie。

  1. 配置 application.properties 文件

在 Spring Boot 3 中,可以直接在 application.propertiesapplication.yml 文件中配置 server.servlet.session.cookie.domain 属性来设置 Cookie 的域名。

application.properties 示例:

1
server.servlet.session.cookie.domain=.example.com

application.yml 示例:

1
2
3
4
5
server:
servlet:
session:
cookie:
domain: .example.com

通过这种方式,可以在 Spring Boot 3 中使用更简洁的方法配置共享 Cookie 的域名,使多个子域之间能够共享状态信息。