在web.xml会话超时(Session TimeOut in web.xml)

2019-07-21 12:19发布

我想了解在web.xml中的会话超时会话配置的真正目的。

<!-- Session Configuration -->
<session-config>
        <session-timeout>60</session-timeout>
</session-config>

现在让我告诉你关于我的问题。

我的应用程序导入/上载.txt文件,这势必需要1个多小时,因为有上百万条记录进口。 但是,会话超时1小时虽然我的应用程序后仍导入一个txt文件,其正在进行中。 随着应用程序在做后台任务的一些这样的应用程序应该不会超时。

Answer 1:

要设置会话超时永不过期是不可取的,因为你将是可靠的用户在每次他说完,防止您的负载过多的服务器里推注销按钮(取决于用户数量和硬件)。 Additionaly有可能会碰上你宁愿避免一些安全问题。

为什么在服务器上依然任务工作会议上得到失效的原因是因为有通过例如HTTP请求的客户端(用户浏览器)和服务器端之间没有沟通。 因此,服务器无法了解用户的状态,认为他的空转,在你设定的时间后会失效web.xml

为了解决这个问题,你有几种可能:

  • 而正在运行的任务摸了会议,并防止它被过期,您可以ping您的后端
  • 增加<session-timeout>服务器内,但我不会推荐
  • 在专用线程同时工作,其接触(扩展)会议或通知用户当线程完成运行任务

有一个类似的问题问,也许你能适应你的项目这个解决方案的一部分。 看看这个 。

希望这有助于,有乐趣!



Answer 2:

<session-config>
    <session-timeout>-1</session-timeout>
</session-config>

您可以使用“-1”,其中会话永不过期。 因为你不知道它会花费多少时间的线程来完成。



Answer 3:

发送AJAX HTTP请求定期服务器(说一次每60秒),通过JavaScript,直到该文件被上传完成与服务器保持会话。



Answer 4:

哈克的方式:

当一个大的上传/下载,预计能以程序增加会话超时。

session.setMaxInactiveInterval(TWO_HOURS_IN_SECONDS)

当过程结束,你可以将超时设置回其默认。

但是..当你在Java EE中,和上/下载并不需要一个完整的时间,更好的方法是运行任务异步(通过JMS EG)。



Answer 5:

<session-config>
        <session-timeout>-1</session-timeout>
</session-config>

在上面的代码"60" stands for the minutes. 之后,会议将过期60 minutes. 所以,如果你想要更多的时间。 例-1所描述的会话永不过期。



Answer 6:

该文档说:

会话超时元素定义在此Web应用程序创建的所有会话的默认会话超时间隔。 指定的超时值必须以分钟为单位的整数来表示。 如果超时为0以下时,容器确保会话的默认行为是绝不超时。 如果没有指定这个元素,容器必须设置为默认的超时时间。



Answer 7:

你可以看到许多选项答案你的问题,但是你可以使用“-1”,其中会话永不过期。 因为你不知道它会花费多少时间的线程来完成。 例如:

   <session-config>
        <session-timeout>-1</session-timeout>
    </session-config>

或者,如果你不想超时发生的一些目的:

<session-config>
    <session-timeout>0</session-timeout>
</session-config>

另一种选择可能是增加的数量为1000,等,等,BLA BLA,喇嘛。

但如果你真的想停下来,你认为是不必要的应用程序强制用户注销,只需添加一个注销按钮,用户将决定什么时候离开。

这里是你可以做什么来解决这个问题,如果你并不需要强制注销,并在您加载可能需要一段时间基础上,服务器和计算机的速度和文件大小相同的文件。

<!-- sets the default session timeout to 60 minutes. -->
   <!-- <session-config>
     <session-timeout>60</session-timeout>
   </session-config> -->

只是评论它或删除这就是它! 谭tararantan,坦坦!



Answer 8:

您可以通过两种方式对这个问题申报时间..

1)要么放弃过很长一段时间,你的文件读取是在这段时间之间完成。

<session-config>
    <session-timeout> 1000 </session-timeout>
</session-config>

2)申报时间,这是永不过期您的会话。

<session-config>
    <session-timeout>-1</session-timeout>
</session-config>


Answer 9:

我会建议另一种方法是创建一个单独的应用程序,它是无状态的,将采取大文件。 在您的主应用程序打开一个新窗口或iframe将接受该文件,并通过该窗口发送,然后隐藏窗口或iframe一旦载已使用Javascript启动。



Answer 10:

如果你不希望发生超时为了某种目的:

<session-config>
    <session-timeout>0</session-timeout>
</session-config>

应导致没有超时可言 - >无限



Answer 11:

你应该考虑拆分大文件块,并依靠多线程处理能力,在一次处理多个文件或使用的TimerTask让整个过程运行作为后台任务,并另写查询就知道它的地位形成的浏览器,包括可以显示一个进度条,如果你能知道一个文件或记录的处理时间。



Answer 12:

通常,当请求处理正在发生的会议将不会过期。 我觉得这是一个LB或东西在读取整个文件之间,然后调用Web容器。

这可能会导致这是导致到期会话的延迟。



文章来源: Session TimeOut in web.xml