Servlets web.xml中的会话超时和最大期限之间有什么区别?

Servlets web.xml中的会话超时和最大期限之间有什么区别?,servlets,cookies,web.xml,session-timeout,Servlets,Cookies,Web.xml,Session Timeout,我不确定我是否理解: <session-config> <session-timeout>30</session-timeout> <!-- 30 minutes! --> <cookie-config> <http-only>true</http-only> <max-age>1800</max-age> <!-- 1800 seco

我不确定我是否理解:

<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>

30
真的
1800
曲奇
另外,有没有办法在web.xml中配置所有cookie?这似乎只适用于会话cookie。此功能是否需要筛选器?

是未使用会话的最长持续时间(从上次请求时算起)。当会话在该时间段内未被使用(无请求)时,服务器端应用程序将终止该会话(您可以捕获此事件并实现自己的行为)

会话cookie
max age
定义此cookie在用户浏览器中存储的时间


为了震荡,当会话cookie达到其最大年龄时,会话将被迫断开连接。在另一种情况下,当会话被
session timemout
事件断开时,会话cookie可能仍然存在于用户浏览器上

为什么我们甚至需要它?引用Servlet 3.0规范:

在HTTP协议中,当 客户端不再处于活动状态。这意味着 可用于指示客户端何时不再处于活动状态 过期

web commons模式确实很好地解释了这一点:

session timeout元素定义在此web应用程序中创建的所有会话的默认会话超时时间间隔。指定的超时必须以整数分钟表示

如果超时为0或更小,容器将确保会话的默认行为永远不会超时。 如果未指定此元素,则容器必须设置其默认值 超时时间


web commons模式还为我们提供了有关
max age
元素的信息:

将分配给此web应用程序创建的任何会话跟踪cookie的生存期(秒)。默认值为-1


回答你最后一个问题:

<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>
另外,有没有办法在web.xml中配置所有cookie?这似乎 仅适用于会话cookie。我是否需要为此类功能设置过滤器

我不这么认为。 最容易™ 这样做的方法是使用子类 重写
addCookie()
方法


总而言之:

  • 会话超时配置会话在消耗服务器资源时的逗留时间,即使在未被主动访问时也是如此

  • max age配置客户端浏览器将保留会话cookie的时间。此设置仅适用于cookie的生存期:如果使用URL重写,它不会起任何作用,而且与会话在服务器端保留的时间完全无关。默认值-1将在浏览器会话处于活动状态时保持cookie


有用链接: Servlet 3.1 JSR-340规范页面:

web commons XSD可从以下网址获得:

在解释他们所了解的内容之前,一定要了解一些事情

从您的问题可以清楚地看出,您已经知道了第一项,但可能对下表中的第二项感到困惑:

  • 这两种设置使用不同的单位:
    会话超时
    以分钟为单位,而
    最大使用时间
    以秒为单位
  • 它们以不同的方式测量时间:
    会话超时
    以相对的方式测量时间,
    最大年龄
    以绝对的方式测量时间(下文将进一步解释)
  • 它们由不同的软件组件考虑和实施。
    会话超时
    由容器考虑,而
    最大使用期限
    由用户浏览器考虑并强制执行。同样地,您可以说
    会话超时
    适用于服务器端,而
    最大年龄
    适用于客户端
会话超时
给出容器决定销毁表示服务器中“连接”的会话对象之前的最大空闲持续时间。这意味着您可以将
会话超时
的值设置为仅1分钟,并且只要浏览器每59秒向服务器发送一次HTTP GET、POST等消息,您仍然可以将会话对象永远保持在服务器中

max age
由用户的浏览器用于计算一个绝对的固定时间点,超过该时间点,会话cookie(
JSESSIONID
在Java中)将不再发送到服务器。浏览器根据服务器将cookie发送到浏览器的时间计算此固定时间点(加上
max age
)。这是一个绝对固定的时间点,超过该时间点,cookie将不再发送到服务器。因此,代表用户的活动或不活动没有区别。这就是为什么如果您在浏览器的开发人员控制台中检查cookie,您会看到会话cookie的绝对时间戳:


警告 对于表示固定时间点的
max age
值的上述说明的例外情况是,如果使用了专门解释的值
-1
。在这种情况下,您可以在开发人员控制台中看到:

…这也意味着浏览器将在“浏览器会话”期间继续发送cookie。我将“浏览器会话”放在引号中,以区别于服务器端会话。浏览器如何理解会话的概念(例如,不同的选项卡是否对应于不同的会话)取决于具体实现

考虑到
会话超时
最大年龄
的不同语义,因此尝试“对齐”两个值,如您在问题中提供的
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>

30
真的
180