【问题标题】:How to alert user before session expires in Java?如何在 Java 中的会话到期之前提醒用户?
【发布时间】:2013-09-02 14:33:48
【问题描述】:

如何在 Java 中的会话到期之前提醒用户?

在 StackOverflow 中,这个问题被讨论了很多次。但我的问题略有不同。 我需要修改现有的应用程序。我的应用程序很大。 如果用户没有响应,会话将在 30 分钟后过期。我想在会话过期之前显示警报,比如在第 25 分钟我想向用户显示有关会话过期的提示

在我的应用中,使用了 2000 多个 jsp,没有使用通用的 js。所以我无法更改所有的 jsp 文件以包含用于检查会话超时的 javascript 代码。

如何处理?

【问题讨论】:

  • 最好在客户端使用 Javascript 而不是 Java。
  • @Stephen C:感谢您的回复。我的应用程序有超过 2000 个文件。我无法在所有 2000 个页面中创建 javascript 代码。
  • @Elayaa : 你可以在服务器中保留一个 javascript 文件并在每个页面中调用它
  • 或者您可以将一个 JSP 片段“包含”到所有 JSP 中。 (我假设您在 JSP 设计中尝试了一些模块化;例如,常见的包含文件以提供常见的标头等。)但无论哪种方式,这都需要在客户端完成。如果这意味着调整 2000 个 JSP,那就这样吧。 (说真的……2000?你创造的这个怪物是什么?)
  • @HussainAkhtarWahid:对不起,我对此很陌生。是否有可用的示例代码?把网址发给我。另外,如果我将 JS 文件保存在服务器端?如何在客户端提示警告信息?

标签: java session


【解决方案1】:

创建一个iframe,并将jsp页面放入其中。

在首页中,iframe 位于其中,然后让 javascript 监控 jsp 页面更改 (https://stackoverflow.com/a/1930942/67566)。

如果 jsp 页面在 25 分钟内没有改变,你可以警告用户。

如果您在 jsp 页面中使用 ajax 调用,那么问题会更大,但是您有这么多 jsp 页面这一事实让我认为您没有。

【讨论】:

  • 谢谢。这是否意味着我要修改所有 2000 个 jsp 页面?很复杂
  • @Elayaa - 您不必修改任何 jsp 页面,因为 javascript 会进行检查。
【解决方案2】:

使用SessionListeners

通过实现HttpSessionListener,您可以在会话到期之前提醒用户。

Have a look at this sample example

编辑:

以下是您可以覆盖的两个方法,sessionCreated(HttpSessionEvent se)sessionDestroyed(HttpSessionEvent se)分别在创建会话和销毁会话时调用。这是一个示例 sn-p。

      public void sessionCreated(HttpSessionEvent se)
{
    HttpSession session = se.getSession();
    System.out.print(getTime() + " (session) Created:");
    System.out.println("ID=" + session.getId() + " MaxInactiveInterval="+  
   session.getMaxInactiveInterval());
  }
public void sessionDestroyed(HttpSessionEvent se)
{
    HttpSession session = se.getSession();
    // session has been invalidated and all session data 
    //(except Id)is no longer available

    System.out.println(getTime() + " (session) Destroyed:ID=" 
   + session.getId());
}
private String getTime()
{
    return new Date(System.currentTimeMillis()).toString();
}

您可以在这些方法中编写您的逻辑。

【讨论】:

  • HttpSessionListener 将在会话创建或销毁后调用。但我想在会话到期之前显示消息。如何做到这一点?
  • @MaheshVarma 您的答案不正确。他想在 sessio 过期之前在客户端显示一些弹出窗口!..
  • 对 OP 的回答不正确。但它可能对正在寻找SessionListeners 的人有用。 @johnSmith
  • 我认为我们可以通过在java中使用会话监听器和Timer类来实现。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-20
  • 2021-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-25
相关资源
最近更新 更多