【问题标题】:onBeforeUnload - how to call a server-side function without ajaxonBeforeUnload - 如何在没有 ajax 的情况下调用服务器端函数
【发布时间】:2010-07-22 12:24:14
【问题描述】:

我想要做的:在客户端检测到“OnBeforeUnload”事件后处理会话。我知道它不会 100% 触发(90% 的准确度对我来说很好)

Here 我看到了如何使用 ajax,但是这个系统在 ajax 中崩溃了:我根本无法使用它。

我正在寻找方法

【问题讨论】:

    标签: javascript asp.net session server-side onbeforeunload


    【解决方案1】:

    简而言之,你不能。您不能将用户的浏览器作为人质,如果您可以做您想做的事情(例如,在页面退出时重定向),这将允许作为一个漏洞利用。 AJAX 是服务器端调用的唯一选择,正如您所指出的,这也是不可靠的。

    【讨论】:

    • 我不想隔离浏览器...但这很容易做到:只需在 OnBeforeUnload 事件之后触发警报、确认或重定向。我已经在 Firefox/IE 7 的机器上完成了它但我不想这样做......我只是想,作为最后的操作,向服务器发送一个标志以终止会话。每个会话超过 7 MB,如果用户关闭浏览器,则必须将其释放。
    • 浏览器崩溃了怎么办?如果互联网连接中断怎么办?如果一开始没有启用 JS 怎么办?忘记尝试检测用户何时离开。只需定期清理不活动的会话即可。
    • @Lynx - 您联系服务器的两种方法是在那里重定向和 AJAX(此时您无法从新元素创建 GET 请求)。那里的每个平台都会超时会话,并且几乎所有平台都提供了清理它们的机制(ASP.Net 也不例外,默认情况下为 20 分钟)。坚持服务器端清理,每个人都这样做是有原因的......你不认为如果这是可能的,它会完成吗?此外,会话不是浏览器窗口独有的,它在选项卡之间共享,如果我打开另一个选项卡怎么办?这种方法也会杀死那个标签。
    【解决方案2】:

    我不知道是否可以在“onBeforeUnload”期间执行此操作,但也许您可以尝试一下。
    将图像注入您的网页,例如:

    <img src="yourscript?param1=value1&param2=value2" />
    

    从服务器端返回一个空图像。

    【讨论】:

      【解决方案3】:

      您可能需要挂钩 同步 调用而不是 AsynchronousJAX。

      【讨论】:

        猜你喜欢
        • 2016-12-28
        • 2017-11-08
        • 2013-10-02
        • 1970-01-01
        • 2016-12-03
        • 1970-01-01
        • 1970-01-01
        • 2018-01-21
        • 2015-03-18
        相关资源
        最近更新 更多