Asp.net 如何让用户通过弹出窗口登录?

Asp.net 如何让用户通过弹出窗口登录?,asp.net,javascript,cookies,forms-authentication,Asp.net,Javascript,Cookies,Forms Authentication,我有一个应用程序,它要求用户在15到30分钟的不活动时间内重新输入密码,以允许他们继续他们正在做的事情 我目前的想法是使用一段javascript,在15分钟后调用弹出窗口,要求用户再次登录。整个站点有15分钟的表单验证超时和30分钟的会话超时 然后,如果用户在弹出窗口中成功验证自己,我希望它允许原始页面进行回发 目前,我的弹出窗口正在工作(使用JS进行15分钟倒计时),用户可以再次登录,但是当弹出窗口关闭,用户试图在其原始页面上执行操作时,会要求他们再次登录 我认为这是因为他们原来附加到原始页

我有一个应用程序,它要求用户在15到30分钟的不活动时间内重新输入密码,以允许他们继续他们正在做的事情

我目前的想法是使用一段javascript,在15分钟后调用弹出窗口,要求用户再次登录。整个站点有15分钟的表单验证超时和30分钟的会话超时

然后,如果用户在弹出窗口中成功验证自己,我希望它允许原始页面进行回发

目前,我的弹出窗口正在工作(使用JS进行15分钟倒计时),用户可以再次登录,但是当弹出窗口关闭,用户试图在其原始页面上执行操作时,会要求他们再次登录

我认为这是因为他们原来附加到原始页面的cookie现在已经过期,并且它不会检测到新的cookie


如何将成功的身份验证从弹出窗口传递到原始页面?

最好使用框架。使顶部框架的高度为0,并定期刷新。这样它就不会被阻塞或意外关闭。您可能还想研究使用Ajax执行相同的操作。

我将创建一个需要密码的面板,并通过一个按钮提供一个正确的代码隐藏方法

然后,您可以使用AJAX或jQuery触发一个模式“弹出”框,要求他们提交详细信息。通过这样做,您可以将所有内容都保存在一个页面上,而不必担心在页面/表单/选项卡/任何内容之间传递凭据

此外,您可以有1个脚本方法在x分钟后触发以提示刷新,并且有第二个javascript方法在x+2分钟后触发以在用户无法响应时将其注销应用程序


您的代码隐藏方法可以正确重置所有cookie并重置超时,并且可以在您希望的任何页面上重复使用。

如果您添加元标记或隐藏div,该标记将在元标记的内容属性中填充身份验证令牌,而仅在隐藏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有一个稍微不同的方法,但它很容易测试,结果是一样的。

我希望用户必须登录,否则我希望他们注销。Dillie-O:谢谢,听起来很有希望。AJAX更新是否能够在没有完整页面回发的情况下刷新cookie?我非常确定,您可以让AJAX脚本注册一个脚本块来执行正确的cookie更新。不管怎样,你都会为密码检查做部分回发。热火守财奴:谢谢,这看起来很有希望,而且更接近我的想法。我的弹出窗口有一个自动关闭的启动脚本,所以我真的需要将数据推回到原始页面,而不是依赖于能够拉出它。嗯。。。好的,对于不支持HTML5和LocalStorage系统的浏览器,没有真正的方法让它们直接这样做,但是,您可以通过使用JavaScript在第二个窗口的div的第一个窗口中进行轮询(window.setInterval)来实现“推送”。一旦弹出窗口中的JavaScript使用标记更新了隐藏的div,主窗口就会将其拾取并相应地执行操作。另一点是,您可能会有一个非常激进的间隔,比如window.setInterval('someFunction()',500),每500毫秒执行一次,然后将自动关闭延迟至少1s,以确保主窗口能够获取令牌。