在web.xml中的Session TimeOut

Vin*_*eet 62 java web.xml servlets java-ee

我试图了解Web.xml中会话超时的会话配置的真正目的.

<!-- Session Configuration -->
<session-config>
        <session-timeout>60</session-timeout>
</session-config>
Run Code Online (Sandbox Code Playgroud)

现在让我告诉你我的问题.

我的应用程序是导入/上传.txt文件,由于需要导入数百万条记录,因此该文件的使用时间超过1小时.但是,虽然我的应用程序仍在导入正在进行的.txt文件,但会话在1小时后超时.应用程序在后台执行某项任务时,此类应用程序不应超时.

Sim*_*Sez 40

设置永不过期的会话超时是不可取的,因为用户每次完成时都可以按下注销按钮,以防止服务器负载过大(取决于用户和硬件的数量).另外,您可能会遇到一些安全问题而宁愿避免.

在服务器仍在处理任务时会话失效的原因是因为客户端(用户浏览器)和服务器端之间没有通过例如http请求进行通信.因此,服务器无法知道用户状态,认为他是空闲的,并且在您设置的时间之后使会话无效web.xml.

要解决这个问题,您有几种可能性:

  • 您可以在任务运行时ping您的后端以触摸会话并防止其过期
  • 增加<session-timeout>服务器内部,但我不建议这样做
  • 在专用线程中运行您的任务,该线程在工作时触摸(扩展)会话或在线程完成时通知用户

有一个类似的问题,也许你可以在你的项目中适应这个解决方案的一部分.看看这个.

希望这有帮助,玩得开心!

  • 请注意,用户登录和会话是两个独立的事情.一般来说,servlet没有"注销".服务器需要一个"注销"页面,它显式调用_HttpSession_的_invalidate()_方法. (2认同)

小智 37

<session-config>
    <session-timeout>-1</session-timeout>
</session-config>
Run Code Online (Sandbox Code Playgroud)

您可以在会话永不过期的地方使用"-1".因为您不知道线程完成所需的时间.

  • 我非常同意@ zb226的评论"错误.会话确实到期"并未提供足够的信息.会话什么时候到期?你对此观察的依据是什么?尽管答案已有几年历史,但人们现在也会提到这些答案! (9认同)
  • @PeakGen:请你好,不要反对.它到期了吗?什么时候这样做? (2认同)
  • @PeakGen:我不认为线程日期是相关的.其他信息将是相关的. (2认同)

小智 9

通过javascript定期向服务器发送AJAX Http请求(比如每60秒一次),以维护与服务器的会话,直到文件上传完成.


vhu*_*ker 9

Hacky方式:

当需要大量上传/下载时,您可以以编程方式增加会话超时.

session.setMaxInactiveInterval(TWO_HOURS_IN_SECONDS)
Run Code Online (Sandbox Code Playgroud)

当进程结束时,您可以将超时设置回其默认值.

但是..当你使用Java EE时,上行/下载不需要一个小时,更好的方法是异步运行任务(例如通过JMS).


S. *_*yol 8

您可以看到许多选项作为问题的答案,但是您可以在会话永不过期的地方使用"-1".因为您不知道线程完成所需的时间.例如:

   <session-config>
        <session-timeout>-1</session-timeout>
    </session-config>
Run Code Online (Sandbox Code Playgroud)

或者,如果您不希望出于某种目的发生超时:

<session-config>
    <session-timeout>0</session-timeout>
</session-config>
Run Code Online (Sandbox Code Playgroud)

另一种选择可能是将数量增加到1000等等,bla,bla,bla.

但是如果你真的想停下来并认为你的应用程序没有必要强制用户注销,只需添加一个注销按钮,用户就可以决定何时离开.

如果您不需要强制注销,并且在加载可能需要时间基于服务器和计算机速度以及文件大小的文件,您可以采取以下措施来解决问题.

<!-- sets the default session timeout to 60 minutes. -->
   <!-- <session-config>
     <session-timeout>60</session-timeout>
   </session-config> -->
Run Code Online (Sandbox Code Playgroud)

只是评论它或删除它就是它!Tan tararantan,晒黑!

  • 0和-1之间有什么区别吗? (7认同)

Ada*_*lam 7

<session-config>
        <session-timeout>-1</session-timeout>
</session-config>
Run Code Online (Sandbox Code Playgroud)

在上面的代码中"60" stands for the minutes.,60 minutes.如果你想要更多的时间,会话将会过期.对于-1描述的示例,您的会话永不过期.


Rub*_*zzo 6

文档说:

session-timeout元素定义在此Web应用程序中创建的所有会话的默认会话超时间隔.指定的超时必须以整数分钟表示.如果超时为0或更小,则容器确保会话的默认行为永远不会超时.如果未指定此元素,则容器必须设置其默认超时期限.