在会话到期时关闭弹出窗口

时间:2009-07-28 01:42:48

标签: java javascript

事情就是这样:我的webapp有大量的弹出窗口,而我的老板希望他们在会话到期时关闭,因为当会话到期并且用户在弹出窗口上按下刷新时,他将显示登录页面 - >用户登录 - >用户被定向到仪表板。现在,弹出窗口中的仪表板屏幕完全不酷。这是谷歌让我的地方:

让javascript关闭popup onload。如果会话已过期,则将此onload脚本生成到响应中(从jsp检查会话到期并有条件地包括onload脚本)。

你认为这是一个好方法吗?这种情况的最佳做法是什么?

P.S:我不允许使用AJAX

5 个答案:

答案 0 :(得分:1)

最好的方法是检查登录并在需要时关闭它们的XMLHTTP请求 - 定期执行此操作。

敏锐的读者(意思是每个人)都会注意到这是一个AJAX请求,但是如果你这样说它可能会被接受为任何人说你不允许使用AJAX'显然是个白痴。

答案 1 :(得分:1)

在过去的生活中,我创建了一个弹出管理器对象来维护窗口打开的内容。如果还没有完成,你应该制作其中一个。然后,您可以使用setTimeout在经过这么多分钟(或任何您想要的时间)之后调用函数。这将检查最近的活动(可能通过AJAX)并在确定会话已过期时关闭弹出窗口。如果没有,请使用新的时间再次致电setTimeout,并针对最近的活动进行适当调整。

在AJAX编辑之前

^^。

好吧,既然你不能使用AJAX,你能在网址中加一些东西来告诉你它是弹出窗口吗?然后,当用户点击重新加载时,您将知道不显示登录屏幕。

答案 2 :(得分:1)

如果你的老板要求你实现这一点,而不使用AJAX,那么你就麻烦了。他应该明白浏览器与服务器的唯一连接(不刷新页面)是javascript(他理解为ajax)。

执行此操作的最佳方法是在页面上设置脚本,询问服务器用户是否仍然每30秒左右登录一次。

setInterval(function(){
  $.get("loggedin.php", function(result) {
    if (!result.isLoggedIn)
      window.close();
  });
}, 30000);

此脚本假设您正在使用jQuery框架来快速开发JavaScript解决方案。这也使用JSON(Javascript Object-notation)来测试loggedin.php文件的返回值。

总而言之,您需要使用AJAX。告诉你的老板别无他法。如果他仍然没有得到它,请他在不使用数学的情况下平衡他的支票簿。

答案 3 :(得分:1)

在Web应用程序中实现模式对话框的另一种方法是:

  1. 在DIV中对对话框进行建模,默认样式为display:none;
  2. 在所需操作上,将模态对话框DIV注入/附加到页面源
  3. 重置CSS显示,使模态对话框DIV可见,通过设置CSS z-index属性覆盖在页面顶部
  4. 在成功执行或用户取消
  5. 后,模态对话框消失

    因为模态对话框是页面源的一部分,所以当会话超时时,对话框将消失。这种方法不会产生支持窗口,当海报试图解决时,这些窗口可能是孤立的。它符合不使用AJAX的要求。

    您可以手动编码,但我不推荐它,因为必须支持各种浏览器。我建议看一下Yahoo User Interface。您可以根据自己的需要定制它(IE:仅模态对话框),如果需求发生变化,它将支持AJAX。

    注意从模态对话框中生成模态对话框。

答案 4 :(得分:0)

理论上,您可以通过使用隐藏的Flash小部件来避免AJAX ...

但更实际的是,AJAX是'正确'的解决方案,我认为你必须与你的老板交谈,确定这个'没有AJAX'规则的来源,并说服他说AJAX是解决这个问题的最佳方法问题

他认为AJAX会花费太多时间来实现吗?如果是这样,你应该证明他错了。他认为难以维持吗?如果是这样,请说明执行此操作的代码有多简单,以及常见的AJAX库的使用范围。如果你的老板是合理的,那么他的目标是最好的产品,你应该能够与他合理。