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.
要解决这个问题,您有几种可能性:
<session-timeout>服务器内部,但我不建议这样做有一个类似的问题,也许你可以在你的项目中适应这个解决方案的一部分.看看这个.
希望这有帮助,玩得开心!
小智 37
<session-config>
<session-timeout>-1</session-timeout>
</session-config>
Run Code Online (Sandbox Code Playgroud)
您可以在会话永不过期的地方使用"-1".因为您不知道线程完成所需的时间.
Hacky方式:
当需要大量上传/下载时,您可以以编程方式增加会话超时.
session.setMaxInactiveInterval(TWO_HOURS_IN_SECONDS)
Run Code Online (Sandbox Code Playgroud)
当进程结束时,您可以将超时设置回其默认值.
但是..当你使用Java EE时,上行/下载不需要一个小时,更好的方法是异步运行任务(例如通过JMS).
您可以看到许多选项作为问题的答案,但是您可以在会话永不过期的地方使用"-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,晒黑!
<session-config>
<session-timeout>-1</session-timeout>
</session-config>
Run Code Online (Sandbox Code Playgroud)
在上面的代码中"60" stands for the minutes.,60 minutes.如果你想要更多的时间,会话将会过期.对于-1描述的示例,您的会话永不过期.
文档说:
session-timeout元素定义在此Web应用程序中创建的所有会话的默认会话超时间隔.指定的超时必须以整数分钟表示.如果超时为0或更小,则容器确保会话的默认行为永远不会超时.如果未指定此元素,则容器必须设置其默认超时期限.
| 归档时间: |
|
| 查看次数: |
252191 次 |
| 最近记录: |