Prima di spiegare cosa sono sicuri di capire alcune cose. Dalla tua domanda, è chiaro che si è già a conoscenza del primo, ma forse confuso circa la seconda voce nella lista qui sotto:
- le due impostazioni utilizzano diverse unità (
session-timeout
è espresso in minuti, mentre max-age
è espresso in secondi)
- misurano il tempo in modi diversi:
session-timeout
misure temporali in modo relativo, max-age
misure temporali in modo assoluto (spiegati più avanti)
- vengono presi in considerazione e applicate dai diversi componenti software. Il
session-timeout
viene preso in considerazione dal contenitore, mentre lo max-age
viene preso in considerazione e applicato dal browser dell'utente. Equivalentemente, si può dire che session-timeout
si applica al lato server mentre max-age
si applica al lato client.
session-timeout
recare il massimo durata di inattività prima che il contenitore decide di distruggere l'oggetto di sessione che rappresenta la "connessione" nel server. Ciò significa che è possibile impostare il valore di session-timeout
a solo 1 minuto e continuare a mantenere l'oggetto di sessione nel server per sempre finché il browser invia messaggi HTTP GET, POST ecc. Al server una volta ogni 59 secondi.
max-age
viene utilizzato dal browser dell'utente per calcolare un punto assoluto, fisso, nel tempo, oltre il quale il cookie di sessione (JSESSIONID
in Java) non verrà più inviato al server. Questo è un valore assoluto e, come tale, l'attività o l'inattività di per conto dell'utente non fa alcuna differenza. Ecco perché, se si esaminano i biscotti nella console sviluppatore del browser si vede un timestamp assoluto per il cookie di sessione:

Caveat: Un'eccezione alla descrizione di cui sopra sul valore della max-age
denota una punto fisso nel tempo, è se viene utilizzato il valore appositamente interpretato -1
.In tal caso è quello che si vede nella console sviluppatore:

& hellip; e anche come spiegato in this answer ciò significa che il browser continuerà a inviare il cookie per la durata della "sessione del browser". Sto mettendo "sessione del browser" tra virgolette per differenziarlo dalle sessioni lato server. Il modo in cui il concetto di una sessione viene compreso da un browser (ad esempio se diverse schede corrispondono a sessioni diverse) è specifico dell'implementazione.
Data la diversità semantica di session-timeout
e max-age
, ne consegue che i tentativi di "allineare" i due valori come la web.xml
estratto da Lei forniti nella tua domanda:
<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; probabilmente indicano confusione.
max-age
fornisce un limite rigido (a meno che non viene utilizzato il valore speciale -1
), mentre session-timeout
fornisce in modo efficace senza limiti, fino a quando l'utente utilizza attivamente la sessione.
Per quanto riguarda il difetto ed i valori appositamente interpretati (0
per la session-timeout
e -1
per max-age
) e se è possibile configurare questi valori per tutti i cookie (in contrasto con appena il cookie di sessione), questi punti sono spiegati in this answer.
I campi cookie come max-age devono essere impostati dall'autore del cookie. Poiché questo cookie di sessione viene creato dal contenitore, il contenitore fornisce la configurazione per i campi. Se un cookie viene generato dalla tua app, la tua app deve impostare i valori dei campi corretti. – ZhongYu