在解釋他們是什麼之前一定要了解一些事情。從你的問題很明顯,你已經知道的第一,但也許是感到困惑在下面的列表中的第二項:
- 兩個設置使用不同的單位(
session-timeout
以分鐘爲單位,而max-age
以秒爲單位)
- 它們測量不同的方式時間:
session-timeout
測量時間以相對方式,max-age
測量時間以絕對方式(下面進一步解釋)
- 他們都考慮在內,並通過不同的軟件組件執行。容器考慮了
session-timeout
,而max-age
則考慮在內並由用戶的瀏覽器強制執行。等效地,您可以說session-timeout
適用於服務器端,而max-age
適用於客戶端。
session-timeout
給出了最大空閒時間之前容器決定銷燬代表與服務器的「連接」會話對象。這意味着您可以將session-timeout
的值設置爲1分鐘,並且只要瀏覽器每59秒向服務器發送一次HTTP GET,POST等消息,仍然可以將會話對象永久保留在服務器中。
max-age
被用戶的瀏覽器用來計算一個絕對的固定時間點,超過這個時間點,會話cookie(Java中的JSESSIONID
)將不再被髮送到服務器。這是一個絕對值,因此,活動或不活動代表用戶沒有任何區別。這就是爲什麼如果您在瀏覽器的開發者控制檯檢查cookies,您看到會話cookie的絕對時間:
![enter image description here](https://i.stack.imgur.com/riu1J.png)
買者:對的max-age
值以上描述的異常表示一個固定時間點,是否使用特殊解釋值-1
。在這種情況下,這就是你在開發者控制檯中看到:
![enter image description here](https://i.stack.imgur.com/asyN8.png)
…也如this answer所述,這意味着瀏覽器將在「瀏覽器會話」期間繼續發送cookie。我將「瀏覽器會話」放在引號中以區別於服務器端會話。瀏覽器如何理解會話的概念(例如,不同的選項卡是否對應於不同的會話)是特定於實現的。
鑑於session-timeout
和max-age
不同的語義,它遵循的是企圖「對齊」兩個值,如web.xml
摘錄你在你的問題提供:
<session-config>
<session-timeout>30</session-timeout> <!-- 30 minutes! -->
<cookie-config>
<http-only>true</http-only>
<max-age>1800</max-age> <!-- 1800 seconds: 30 minutes! -->
</cookie-config>
<tracking-mode>COOKIE</tracking-mode>
</session-config>
&hellip;可能表示混亂。
max-age
提供了一個硬限制(除非使用特殊值-1
),而session-timeout
只要用戶主動使用該會話就不會有效提供限制。
關於(爲session-timeout
和-1
爲max-age
0
)的默認和專門解釋價值以及是否可以爲所有的cookies設置這些值(而不是僅僅在會話cookie),這些點在this answer解釋。
像max-age這樣的Cookie字段應該由cookie的創建者設置。由於此會話cookie是由容器創建的,容器爲這些字段提供配置。如果您的應用程序生成cookie,則您的應用程序需要設置適當的字段值。 – ZhongYu