【问题标题】:HTTP request from a browser upon a session timeout会话超时时来自浏览器的 HTTP 请求
【发布时间】:2017-01-27 08:12:11
【问题描述】:

我的 UI 由两个 HTTP 服务器提供服务。 因此我需要从两台服务器上清除 HTTP 会话。 注销用例很简单,但我不清楚会话超时用例如何做。

服务器端的通知可以通过 HttpSessionBindingListener Getting notification when bounded/unbounded to a HTTP session。 但是我怎样才能通知客户站点呢? 我必须将请求从浏览器发送到第二台服务器才能清除第二台服务器上的会话 cookie,因此我无法从服务器端发送请求。

已添加

一个服务器是 Tomcat 8,第二个服务器是 Apache HTTPD 服务器。我想通过 UI 回调解决它是可能的(来自 Tomcat HTTP servlet 服务器)。

【问题讨论】:

  • 这不是更多的服务器配置吗?我认为有一种方法可以配置服务器以共享会话。您能否提供有关您正在使用的服务器的更多详细信息,包括版本?
  • 好问题。我正在等待更多细节。我将这种方法与 Spring Session(集群:docs.spring.io/spring-session/docs/current/reference/html5/…)进行了比较,后者使用像 redis 这样的外部存储来管理集群会话。 PS:我希望在 SO 上有一个订阅按钮来解决这些问题。
  • Kieveli,我不想配置任何会话共享。一台服务器是 Tomcat 8,第二台服务器是 Apache HTTPD 服务器。我想通过 UI 回调解决它是可能的(来自 Tomcat HTTP servlet 服务器)。 code4kix,订阅问题只需按星按钮
  • 在 Apache httpd 的上下文中,“HTTP 会话”到底是什么意思? (mod_session?)为什么你需要明确地清除它——你不能给会话一个服务器端过期时间戳并在尝试访问它时使其无效吗? (mod_session 的 SessionMaxAge)
  • 例如 mod_session。我计划在服务器时间配置会话超时。无论如何,因为它是两个会话,即使我配置了相同的时间段,一个会话可能会变得无效,而第二个会话仍然存在。因此,我想在 Tomcat 会话到期时清理 Apache 会话,

标签: session notifications httpsession


【解决方案1】:

来自 Apache HTTPD (Apache) 文档:

将会话与外部应用程序集成

https://httpd.apache.org/docs/2.4/mod/mod_session.html#integration

  • 您可以编写自己的模块,然后您可以使用该模块在 Tomcat 认为会话可消耗后删除会话。
  • 您可以使用 Tomcat 和 Apache 外部的会话数据库(例如,在 MySQL 中),两个服务器都会使用它来验证用户。删除会话只需要从数据库中删除条目。
  • 作为一个独立的应用程序:正如文档所述,您需要负责查找和访问会话文件、破坏它们并进行编辑。如果 Tomcat 和 Apache 在不同的机器上,您可以在 Apache 机器上安装一个带有侦听器的代理,然后让 Tomcat 请求代理删除会话数据。
  • Apache 通常与 PHP 一起使用,并且周围也有数据库。两者都可以处理自己的会话。

【讨论】:

  • 我确实想通过数据库管理会话。在上面的答案中找不到解决方案
  • 我不会编写代码,但同样,您可能希望在 apache httpd 框(或您的 apache 分支)上运行一个独立的应用程序。让它监听一个端口(套接字或java调用)。每当tomcat删除一个会话时,它必须调用这个程序,该程序必须删除匹配的apache httpd会话。没有简单的框架调用,你必须做所有事情。
  • 我需要通过浏览器回调。我可以通过服务器端开发大量解决方案,但我需要一个浏览器解决方案
  • 如果浏览器是指客户端/用户的浏览器。然后你可以自己关闭页面请求的两个会话:mytomcatserver.com/closesession.jsp, myapacheserver.com/closesession,php
  • 如果您指的是浏览器而不是客户端的(而不是您的),那么您仍然可以将其连接到独立应用程序
【解决方案2】:

您可以尝试几种方法。

  1. 正如@Kwebble 所述,在 Tomcat 会话超时时调用您的 Apache 服务器并要求它注销/使会话无效。

  2. 如果 Tomcat 中的会话超时,UI 会在它发出任何请求时知道这一点。现在从 UI 调用 Apache 服务器以注销/使会话无效。

【讨论】:

    猜你喜欢
    • 2015-08-08
    • 2018-09-19
    • 1970-01-01
    • 2013-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多