asp.net - 如何通过弹出窗口保持用户登录状态?

标签 asp.net javascript cookies forms-authentication

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

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

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

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

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

如何将弹窗中的认证成功传递到原页面?

最佳答案

如果您添加元标记或隐藏的 div,它会在元标记的内容属性中填充身份验证 token ,并且仅在隐藏的 div 的 div 主体中填充身份验证 token ,您可以像这样从弹出窗口中获取它...

var debugWin = window.open('','aWindow','width=600,height=600,scrollbars=yes');
var somevar = debugWin.document.body.getElementById("my_hidden_div_id").innerText;

然后您可以使用 JavaScript 中 somevar 的内容更新 session cookie。只要维护窗口的句柄,就应该能够获取窗口的 DOM。

在获取 dom 的方式上可能存在一些跨浏览器差异,我认为 IE 的方法略有不同,但很容易测试并且结果是相同的。

关于asp.net - 如何通过弹出窗口保持用户登录状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/864133/

相关文章:

c# - 比较 Linq 中的天数

c# - 视频自动播放不起作用

c# - LDAP - 检索所有属性/值的列表?

Javascript 调用服务器端函数,无需 AJAX 或 PageMethods

javascript - 基本的 JavaScript EventListener 不工作?

google-app-engine - 在浏览器 : Golang 设置 Cookie

jquery - 在页面加载时选择下拉列表中选择选项

JavaScript 表单验证 2 个字母 1 个数字

http - 抓取时如何处理cookie

asp.net-mvc - 如何将 Asp.Net Identity 中的大 cookie 分成较小的 cookie 以允许许多声明?