在Java Web应用的部署描述符Web.xml中,我们可以通过session-config和cookie-config标签组合,对Session Cookie的各项属性进行自定义设置,满足不同场景下的会话管理需求。

session-config与cookie-config的基本结构
session-config是Web.xml中用于配置会话管理的顶层标签,而cookie-config是session-config的子标签,专门用于定义Session Cookie的相关属性。完整的配置结构如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<session-config>
<session-timeout>30</session-timeout>
<cookie-config>
<name>MY_SESSION_ID</name>
<domain>ipipp.com</domain>
<path>/app</path>
<comment>用户会话标识Cookie</comment>
<http-only>true</http-only>
<secure>false</secure>
<max-age>3600</max-age>
</cookie-config>
</session-config>
</web-app>
cookie-config支持的配置属性说明
cookie-config标签下包含多个子标签,每个子标签对应Session Cookie的一个属性,具体说明如下:
| 子标签名称 | 作用说明 | 默认值 |
|---|---|---|
| name | 自定义Session Cookie的名称,默认是JSESSIONID | JSESSIONID |
| domain | 设置Cookie的生效域名,比如设置为ipipp.com后,该Cookie在ipipp.com的所有子域名下都可用 | 当前应用的域名 |
| path | 设置Cookie的生效路径,只有访问该路径下的资源时,浏览器才会携带该Cookie | 当前应用的上下文路径 |
| comment | 设置Cookie的注释信息,部分浏览器会展示该信息 | 无 |
| http-only | 设置为true时,Cookie无法通过JavaScript的document.cookie访问,可防止XSS攻击窃取会话 | false |
| secure | 设置为true时,Cookie仅在HTTPS协议下传输,提升传输安全性 | false |
| max-age | 设置Cookie的过期时间,单位是秒,负数表示浏览器关闭时失效,0表示立即删除 | -1 |
配置注意事项
在进行配置时需要注意以下几点:
- session-timeout标签用于设置Session的超时时间,单位是分钟,和cookie-config的max-age属性作用不同,前者是服务端Session的存活时间,后者是客户端Cookie的存活时间。
- 如果设置了secure为true,但是应用部署在HTTP环境下,浏览器将不会保存该Cookie,会导致会话无法保持。
- domain属性的设置需要符合Cookie的域名规范,不能设置为当前域名之外的不相关域名,否则浏览器会忽略该Cookie。
- 修改Web.xml配置后需要重启Web容器才能生效。
配置生效验证
配置完成后,我们可以通过浏览器开发者工具查看Cookie是否生效。比如在上面的配置中,访问应用后,Cookie的名称会变成MY_SESSION_ID,HttpOnly属性会显示为是,过期时间会设置为3600秒。也可以通过后端代码获取Session Cookie的名称进行验证:
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class CheckCookieServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 获取所有Cookie
Cookie[] cookies = req.getCookies();
if (cookies != null) {
for (Cookie cookie : cookies) {
// 输出Cookie名称,验证是否为自定义的名称
System.out.println("Cookie名称:" + cookie.getName());
System.out.println("Cookie值:" + cookie.getValue());
}
}
// 获取Session,触发Session创建(如果不存在的话)
req.getSession();
}
}
通过上述配置和验证,我们可以灵活调整Session Cookie的各项属性,满足应用的安全、功能需求。
session_configcookie_configWeb_xmlSession_Cookie修改时间:2026-07-01 07:39:12