Показать сообщение отдельно
  #1 (permalink)  
Старый 12.12.2016, 09:54
Интересующийся
Отправить личное сообщение для eternal Посмотреть профиль Найти все сообщения от eternal
 
Регистрация: 10.02.2011
Сообщений: 19

SetInterval Ajax + Cookie и несколько вкладок
Друзья, подскажите пожалуйста. На сайте каждые 5 секунд через функцию SetInterval отправляются запросы к серверу, чтобы узнать, есть ли у пользователя новые уведомления. Эта часть работает отлично. Но возникает проблема, когда сайт открыт в нескольких вкладках. Тогда каждая страница отправляет каждые 5 секунд запрос. Растет нагрузка на сервер и все такое. Решил сделать так, чтобы одновременно уходил запрос только с одной вкладки, а если что-то меняется, то по ответу сервера вызывать функции во всех открытых вкладках. Сделал через куки: Устанавливаю куку checkAnnotations на 5 секунд, если она установлена то ajax запросы не запускаю, соответственно запрос на сервер уходит с той вкладки, в которой сработал setInterval ближе к окончанию действия куки.

Если сервер вернул какие-то результаты, сохраняю их в другие куки, которые также по setInterval проверяю в каждой вкладке, если есть изменения, то показываю их в каждой вкладке.
Но проблема возникает в Опере - кука сохраняется не на 5 секунд, а на 3часа и 5секунд. В Mozilla отлично, кука сохраняется на 5с
Вот так сохраняю:
function setcookie(name, value, expires, path, domain, secure)
{
    document.cookie =    name + "=" + escape(value) +
                        ((expires) ? "; expires=" + (new Date(expires)) : "") +
                        ((path) ? "; path=" + path : "") +
                        ((domain) ? "; domain=" + domain : "") +
                        ((secure) ? "; secure" : "");
}

var date = new Date();
expiresDate = date.setTime(date.getTime() + (5 * 1000));
setcookie('checkAnnotations', '1', expiresDate, "/");


Причем, если вывести в консоле код
var d = new Date();
d.setSeconds(d.getSeconds() + 5);
gmt = d.toGMTString();
console.log(gmt);

В Mozille и Opere выводит одинаковую дату, но кука в Опере при этом сохраняется на 3 часа позднее

Последний раз редактировалось eternal, 12.12.2016 в 10:52.
Ответить с цитированием