Для начала конечное тз (внести правки):
После открытия сайта site.com в N вкладках отслеживать, когда N = 0, т.е. нет вкладок с сайтом site.com. При наступлении события N = 0 производить логаут.
Пингуйте localStorage:
суть скерстить ежа с ужом, альфабанк и идея со сторейджем мне подсказали кое-что.
ping = getLS('ping'); // Когда открывается site.com мы смотрим из LS некую виличину (lastPingTime или для простоты просто ping). Получаем число)
currentTime = (new Date()).getTime(); //Получаем текущую метку времени
delta = 100; // количество миллисекунд для тревоги
interval = 42; // я ставлю 1/24-ую секунды, а так рекомендуемый интервал 20--50. Нет, не нагрузит. Да, интервал.
if (currentTime - delta > ping) { // если было перед этим закрытие или в первый раз
// я бы сбросил куки, прочую гадость, тут тело для логина
} else {
// если всё замечательно и юзер не закрывал нашу вкладку
}
setLS('ping', currentTime); // обновляем значение ping и
setInterval(function () { // добавляем таймер
setLS('ping', currentTime);
}, interval);
Суть, думаю, ясна. Я всё свёл к чему, что js и так всем правит. Если нужна безопасность, (а то вдруг юзер закроет вкладку, выключит js и снова откроет), то можете там же юзать и ключи безопасности, наподобии альфы или вообще всю страницу строить на основе ajax-ответов.
Так же вы можете юзать куку установив время жизни = 1с, и обновляя его, но на сколько это нагруженно я не знаю. Дерзайте!)