2014-08-28 3 views
2

У меня есть кнопка выхода из системы, основанная на том, что мне нужно обновить пользователя: офлайн или онлайн, но многие пользователи просто не используют эту кнопку и просто закрывают браузер.Как сделать автономный статус, если пользователь закрыл браузер, не нажав кнопку выхода из системы?

Пробовал, как следующий код, но не отправил последний запрос на сервер. Как это сделать?

$(window).bind('beforeunload', function(e) { 
    //if (id>=2) { 
    // return "WARNING: Your status is call connected. If you refresh now, software will lose all the connection status."; 
    //} else { 
    // return "WARNING: Your status is not connected. You can refresh."; 
    //} 

    $.ajax({ 
     type : "GET",//POST 
     dataType: 'json', 
     url  : '/php/makeunavailable', 
     data : url, 
     async : true, 
     beforeSend: function() { 
     }, 
     complete: function() { 
     }, 
     success : function(msg) { 
     // do nothing but make offline 
     } 
    }); 


    }); 

ответ

-1

если вы используете PHP сервер просто использовать $ _SESSION, потому что он будет уничтожен Automaticlly, когда пользователь закрывает браузер. кстати, где ar u определил этот url data : url,

0

Я не совсем уверен в этом, но попробуйте использовать $(window).on вместо $(window).bind. Они должны работать, но я всегда использовал $(window).on. Кроме того, что вы ссылаетесь на function(e){? Мой первый, непроверенный инстинкт будет использовать:

$(window).on('beforeunload', function(){.

2

Я делаю что-то похожее на то, что вы пытаетесь выполнить в моей экспериментальной подсистеме обмена сообщениями.

Прежде всего, нужно отметить, что вы должны иметь простоя в режиме ожидания на стороне сервера. Сделайте клиентом уведомление о присутствии сервера каждые N секунд и обработайте клиентов, которые не пинговали в N + L секундах, как офлайн, где L представляет собой некоторое количество прогнозируемой задержки (на верхнем конце, чтобы избежать обильного «хлопания»).

На стороне клиента мне посчастливилось отправлять запросы «в последнюю минуту», когда изменения статуса соединения указывают на отказ/прерывание, а не на onbeforeunload. По общему признанию, это может быть связано с некоторыми неортодоксами в моем коде. Но браузеры, естественно, отключают соединения, прежде чем они полностью закрывают окно или вкладку. И у него есть дополнительное преимущество запуска, когда что-то, кроме закрытия страницы, прерывает соединение. Итак, мне повезло с этим.

Я использую XmlHttpRequests, так это выглядит примерно так, где r моего запрос объект:

r.onreadystatechange = function() { 
    if (r.readyState == 4) { 
    if (r.status == 200) { 
     // success logic 
    } else if (r.status == 0 || r.responseText == '') { 
     // assume the client aborted the connection 
     issueLogoutRequest(); 
    } else { 
     // failure logic 
    } 
    } 
} 

Полный клиентская сторона источник может или не может быть полезным. (Это огромно.) Это видно на thepointless.com в подсистеме обмена сообщениями, если вы хотите совать.

Если вы используете WebSocket's, я не могу обещать, что эта стратегия работает одинаково хорошо. Но сначала я попробую привязать к onclose и onerror, чтобы узнать, позволяет ли кто-либо из них разрешить вам последнюю минуту XmlHttpRequest.

Смежные вопросы