繁体   English   中英

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

[英]Closing popups on session expiry

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

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

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

PS:我不允许使用AJAX

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

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

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

在AJAX编辑之前^^。

好吧,因为你不能使用AJAX,你能在网址中放一些能告诉你弹出窗口的内容吗? 然后,当用户点击重新加载时,您将知道不显示登录屏幕。

如果你的老板要求你实现这一点,而不使用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。 告诉你的老板别无他法。 如果他仍然没有得到它,请他平衡他的支票簿而不使用数学。

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

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

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

你可以手工编写这些代码,但我不推荐它,因为必须支持各种浏览器。 我建议看看雅虎用户界面 您可以根据自己的需要定制它(IE:仅模态对话框),如果需求发生变化,它将支持AJAX。

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM