C# 检测用户是否已离开站点

C# 检测用户是否已离开站点,c#,javascript,jquery,asp.net,browser,C#,Javascript,Jquery,Asp.net,Browser,我目前正在aspx的一个网站上工作,在那里我需要检测并记录用户是否即将离开该网站 如果用户: 单击浏览器上的后退或前进按钮 单击浏览器关闭按钮 单击tab close按钮 导航到新网站 如果远程可能,请更改需求,因为这将导致不理想的用户体验 至少在某些浏览器上,您可以从onbeforeunload处理程序执行同步ajax请求,以向服务器发送用户正在离开页面的信息: window.onbeforeunload = function() { $.ajax({ url:

我目前正在aspx的一个网站上工作,在那里我需要检测并记录用户是否即将离开该网站

如果用户:

  • 单击浏览器上的后退或前进按钮
  • 单击浏览器关闭按钮
  • 单击tab close按钮
  • 导航到新网站

如果远程可能,请更改需求,因为这将导致不理想的用户体验

至少在某些浏览器上,您可以从
onbeforeunload
处理程序执行同步ajax请求,以向服务器发送用户正在离开页面的信息:

window.onbeforeunload = function() {
    $.ajax({
        url:   "/path/to/page",
        data:  {/* ...stuff... */,
        async: false // <== Option is being removed soon
    });
};

你试过什么吗?“如果用户要离开网站…”你需要一个通灵师,当然?这显示了如何在每个页面进行检查。@T.J.Crowder他可以使用一种使用网络摄像头的人脸检测来检查用户是否高兴…这并不像您所建议的那样在FF上真正起作用:>作为一种解决方法:为糟糕的黑客行为感到抱歉,或者使用提示消息BTW,async false仅不推荐用于DOC之后的延迟对象,我仍然不知道这是否意味着jqXHR的选项仍将受到支持或支持not@roasted:我的印象是“不是”。@broading:对Firefox来说也不错!:-)
(function($) {
    var SECOND = 1000;
    var MINUTE = 60000;
    var arrived = +new Date();
    var pingTimes = {
        0:      10 * SECOND, // Every 10 seconds in first minute
        1:      30 * SECOND, // Every 30 seconds in second minute
        2:      45 * SECOND, // Every 45 seconds in third minute
        other:  60 * SECOND, // Every minute otherwise
        long:   10 * MINUTE  // Every 10 minutes if they've been here a long time
    };

    nextPing();

    function ping() {
        $.ajax({
            url:     "/path/to/ping/page",
            method:  "POST",
            success: nextPing,
            error:   nextPing
        });
    }

    function nextPing() {
        var elapsed, pingTime;

        // Get the # of full minutes they've been here
        elapsed = Math.floor((new Date() - arrived) / MINUTE);

        // If it's been a long time, use `pingTimes.long`.
        // Otherwise, use the time from the table or the default.
        pingTime = elapsed > 15 * MINUTE ? pingTimes.long : (pingTimes[elapsed] || pingTimes.other);

        setTimeout(ping, pingTime);
    }

})(jQuery);