[英]How do you keep a user logged in with a popup window?
我有一个应用程序,要求用户在15到30分钟不活动之间重新输入密码,以允许他们继续自己的工作。
我当前的想法是使用一段JavaScript,在15分钟后调用一个弹出窗口,要求用户再次登录。 该站点整体上有15分钟的表单身份验证超时和30分钟的会话超时。
然后,如果用户在弹出窗口中成功对其进行身份验证,我希望它允许原始页面进行回发。
目前,我正在使用弹出式窗口(使用JS进行15分钟的倒计时),并且用户可以再次登录,但是当弹出窗口关闭并且用户尝试在其原始页面上执行操作时,系统要求他们登录再次。
我认为这是因为附加在原始页面上的原始cookie现在已经过期,并且不会检测到新的cookie。
如何将成功的身份验证从弹出窗口传递到原始页面?
我将创建一个需要密码的面板,并通过一个按钮在方法后面有一个正确的代码。
然后,您可以使用AJAX或jQuery触发模式“弹出”框,要求他们提交详细信息。 这样,您可以将所有内容保存在单个页面上,而不必担心在页面/表单/选项卡/任何页面之间传递凭据。
此外,您可以使用1种脚本方法在x分钟后触发以提示刷新,并可以使用另一种JavaScript方法在x + 2分钟后触发以将用户退出应用程序(如果他们无法响应)。
您的方法代码可以正确地重置所有cookie并重置超时,并且可以在所需的任何页面上重复使用。
如果您添加一个元标记或隐藏的div,该标记将身份验证令牌填充在meta标签的content属性中,并且仅在div主体中的隐藏的div中,您可以像这样从弹出窗口中获取它...
var debugWin = window.open('','aWindow','width=600,height=600,scrollbars=yes');
var somevar = debugWin.document.body.getElementById("my_hidden_div_id").innerText;
然后,您可以使用JavaScript中somevar的内容更新会话cookie。 只要您维护窗口的句柄,您就应该能够获取窗口的DOM。
进入dom的方式可能会有一些跨浏览器的差异,我认为IE的方法略有不同,但易于测试,结果是相同的。
最好使用框架。 使顶部框架的高度为0,并使其自身定期刷新。 这样,它不会被阻塞或意外关闭。 您可能还想研究使用Ajax做同样的事情。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.