當創建一個 cookie 時
@GetMapping("getCookieUsingResponseCookie")
public ResponseEntity<?> getCookieUsingResponseCookie() {
Duration d = Duration.ofDays(7);
ResponseCookie cookie = ResponseCookie.from("LWSSO_COOKIE_KEY","123-LWSSO_COOKIE_KEY-VALUE-456")
.domain("localhost")
.httpOnly(true)
// .maxAge(1000 * 60 * 60 * 24 * 7) // a week
.maxAge(d)
// .maxAge(500) // a week
.path("/")
.secure(true)
.build();
HttpHeaders headers = new HttpHeaders();
headers.set(HttpHeaders.SET_COOKIE, cookie.toString());
System.out.println(cookie.toString());
ResponseEntity<?> response = new ResponseEntity<>(null, headers, HttpStatus.OK);
return response;
}
或者即使我使用
.maxAge(1000 * 60 * 60 * 24 * 7) // a week
而不是持續時間 cookie 看起來像:
Set-Cookie: LWSSO_COOKIE_KEY=123-LWSSO_COOKIE_KEY-VALUE-456; Path=/; Domain=localhost; Max-Age=PT168H; Expires=Tue, 14 Jun 2022 22:35:02 GMT; Secure; HttpOnly
與其他 cookie 或使用 javax.servlet.http.Cookie 相比,Max-Age=PT168H 似乎是錯誤的
查看了 RFC,但沒有看到有關該格式的任何內容。這是一個錯誤嗎?
uj5u.com熱心網友回復:
不,這不是錯誤。
根據檔案 maxAge屬性是 type java.time.Duration。所以,你看到的是toString()Duration 物件的表示。
DurationtoString()使用基于 ISO-8601 秒的表示形式回傳持續時間的字串表示形式,例如PT8H6M12.345S.
字串的格式為PTnHnMnS,其中n是持續時間的相關小時、分鐘或秒部分。
例子:
"20.345 seconds" -- "PT20.345S
"15 minutes" (15 * 60 seconds) -- "PT15M"
"10 hours" (10 * 3600 seconds) -- "PT10H"
"2 days" (2 * 86400 seconds) -- "PT48H"
所以 7 天將有 7*24 小時,總共 168 小時,將使用上述模式描述為:PT168H
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/491366.html
