onbeforeunload будет работать в некоторых браузерах (Chrome), но не в других.(Safari, FF и IE).
Обходной путь - сделать ajax синхронным,
window.onbeforeunload = function(){
var user_st = "0";
$.ajax({
type:"POST",url:"inc/offline.php",
data:"user_st="+user_st,
async: false
});
}
, но синхронный Ajax устарел.Вы можете попробовать, если вы можете принять устаревшие методы.
Если вам не требуется, чтобы онлайн / офлайн был 100% реального времени, одним из решений может быть вместо того, чтобы сообщать офлайн, пусть пользователь отчитывается онлайн (каждый30 секунд, если сервер не получает онлайн-обновления в течение более 30 секунд, он рассматривает этого пользователя как офлайн.) Потенциальным недостатком является то, что большее количество вызовов БД.(Вам нужно сохранить его в базе данных? Может ли это быть в memcache?)