JavaWeb 同时给 cookie 设置过期时间Expires 和 Samesite 属性
2023-09-14 08:58:22 时间
有一个需求,同时给 cookie 设置过期时间Expires 和 Samesite 属性。Expires 为一个具体的时间,Samesite=none
失败过好多次,最后发现规律是:
httpResponse.addHeader("Set-Cookie",cksb.toString());
Samesite 有效,Expires 无效,永远是 session。
httpResponse.addCookie(cookie2);
Expires 有效,Samesite 无效,永远是默认。
最终解决方案是:
import org.springframework.http.HttpHeaders;
import org.springframework.http.ResponseCookie;
ResponseCookie cookie;
if (TGC_COOKIE_SECURE) {
cookie = ResponseCookie.from(cookieName, cookieValue) // key & value
.httpOnly(true) // 禁止js读取
.secure(true) // 只在https传输
.path("/")// path
.maxAge(age) // 过期
.sameSite("None")// 大多数情况也是不发送第三方 Cookie,但是导航到目标网址的 Get 请求除外
.build();// 设置Cookie
} else {
cookie = ResponseCookie.from(cookieName, cookieValue) // key & value
.httpOnly(true) // 禁止js读取
.secure(false) // 在http下也传输
.path("/")// path
.maxAge(age) // 过期
.build();// 设置Cookie
}
// 注意是 addHeader,不是setHeader,不然就只有一个cookie了
response.addHeader(HttpHeaders.SET_COOKIE, cookie.toString());
//下面是合并成一行的写法
ResponseCookie cookie;
if (TGC_COOKIE_SECURE) {
cookie = ResponseCookie.from(cookieName, cookieValue).httpOnly(true).secure(true).path("/").maxAge(age).sameSite("None").build();
} else {
cookie = ResponseCookie.from(cookieName, cookieValue).httpOnly(true).secure(false).path("/").maxAge(age).build();
}
response.addHeader(HttpHeaders.SET_COOKIE, cookie.toString());
//也可以设置domain 属性
原创文章,欢迎转载,转载请注明出处!
相关文章
- session和cookie的区别和联系详解,Cookie Session相关看这篇就够了。
- 关于“属性”的几个问题,也许面试会问到哦~
- Open Flash Chart图表的JSON格式基本属性详解
- ifc属性
- 自定义控件:滑动开关按钮(自定义属性)
- Swift专题十一——属性
- python-面向对象-09_类属性和类方法
- Python Django Cookie的设置和获取相关属性
- java list按照元素对象的指定多个字段属性进行排序
- 【Groovy】Xml 反序列化 ( 使用 XmlParser 解析 Xml 文件 | 获取 Xml 文件中的节点和属性 | 获取 Xml 文件中的节点属性 )
- 【DOM】DOM操作之如何修改元素的内容与属性_02
- Groovy中的任务的自定义属性设置
- Qt编写控件属性设计器1-加载插件
- Qt编写控件属性设计器2-拖曳控件