Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 防止会话';Jetty中的上次访问时间更新_Java_Session_Jetty_Session Timeout_Lastaccesstime - Fatal编程技术网

Java 防止会话';Jetty中的上次访问时间更新

Java 防止会话';Jetty中的上次访问时间更新,java,session,jetty,session-timeout,lastaccesstime,Java,Session,Jetty,Session Timeout,Lastaccesstime,当访问特定servlet时,是否可以指示Jetty服务器不更新会话的上次访问时间 我们的用例是一个HTML页面,它每5分钟在后台发送一次异步请求以刷新其内容。会话的超时时间设置为30分钟。 这种配置的一个不幸问题是,当用户在浏览器选项卡中打开该页面时,会话永远不会过期,因为会话的访问时间由每个异步请求更新 为了正确起见,我必须承认,我还没有尝试任何东西,因为我无法在互联网上找到任何帮助来解决我的问题。如果我所要求的是不可能的,我会考虑将访问时间存储在由应用程序直接控制的会话变量中。在处理请求之前

当访问特定servlet时,是否可以指示Jetty服务器不更新会话的上次访问时间

我们的用例是一个HTML页面,它每5分钟在后台发送一次异步请求以刷新其内容。会话的超时时间设置为30分钟。 这种配置的一个不幸问题是,当用户在浏览器选项卡中打开该页面时,会话永远不会过期,因为会话的访问时间由每个异步请求更新


为了正确起见,我必须承认,我还没有尝试任何东西,因为我无法在互联网上找到任何帮助来解决我的问题。如果我所要求的是不可能的,我会考虑将访问时间存储在由应用程序直接控制的会话变量中。在处理请求之前(在servlet的
doGet
doPost
方法中),必须提前检查该值,并且需要手动使会话无效。有更好的解决方案吗?

Servlet无法区分请求是由脚本还是人工生成的,因为这两个请求来自同一个浏览器,因此发送相同的JSESSIONID。因此,您必须标记这些请求以区分其来源。您可以通过一些头或请求参数来标记它们

我喜欢您将访问时间存储在会话变量中的想法(它将在servlet会话到期时使用) 在这种情况下,您的算法将是:

if isUser(request){ 
    session.lastRobotAccess == null
}else{
    if (session.lastRobotAccess == null) {
       session.lastRobotAccess = current_time
    } else {
       if(current_time - session.lastRobotAccess > session.timeout){
          session.invalidate
       }
    }
}
当请求到达servlet容器时,它首先由过滤器(如果您已经定义)处理,然后由servlet处理

过滤器的常见场景是要应用的场景 对组的请求或响应进行预处理或后处理 一个servlet,而不仅仅是一个servlet。如果需要修改 对于一个servlet的请求或响应,不需要创建 过滤器只需直接在servlet本身中执行所需的操作

因为您可以从过滤器访问会话,所以它们更适合您的逻辑。您不会因为额外的检查而污染servlet的逻辑,您可以将其应用于其他servlet。过滤器也是servlet规范的一部分,因此它可以在任何容器中工作


你已经知道这些,但我只是把它们写在“纸上”:-D

谢谢你提出使用过滤器的想法。