Использование javascript для pinging webapp для открытия сеанса

Я пишу greasemonkey script, чтобы держать сеанс открытым в webapp, который я использую для работы. Какую команду javascript вы использовали бы для создания обратной связи с сервером и убедитесь, что сеанс не падает без необходимости беспокоить пользователя, делающего полное обновление страницы?

Ответы

Ответ 1

Спасибо всем! Я решил проблему, используя:

function keep_alive() {
    http_request = new XMLHttpRequest();
    http_request.open('GET', "/restricted_file_url");
    http_request.send(null);
};

setInterval(keep_alive,840000);  //My session expires at 15 minutes

Ответ 2

Второй выбор

Если вы абсолютно настаиваете на использовании Greasemonkey, любой метод element.click() для любого события, которое отправляет XMLHTTPrequest, должен делать.

Первый выбор

Если вы хотите использовать решение, которое не требует, чтобы вы писали Greasemonkey script:

ReloadEvery 3.0.0, by Jaap Haitsma

Это перезагружает веб-страницы каждые несколько секунд или минут. Функция доступна через контекстное меню (меню, которое вы получаете при щелчке правой кнопкой мыши на веб-странице) или через выпадающее меню на кнопке перезагрузки.

Это не то, о чем вы просили, но если вы просто не хотите освежить свои навыки javascript, это, вероятно, самый простой способ решения вашей проблемы.

Ответ 3

Если вы хотите написать JavaScript, чтобы решить эту проблему (другие ответы намного проще, и я бы порекомендовал идти по более легкому маршруту), вот что я сделал бы:

  • Вызов document.createElement( "iframe" ) для создания iframe
  • Измените iframe на 0x0, style.display = "none", установите идентификатор на что-то и установите для свойства src страницу на сайте, которая расширит вашу сессию
  • Используйте document.body.appendChild, чтобы добавить iframe на страницу
  • Использование setTimeout обновляет iFrame, используя window.frames ['iframeID']. location.reload(true); а также вызовите setTimeout, чтобы снова обновить страницу.

Посмотрите, будут ли другие ответы работать, потому что, используя JavaScript, похоже, что это будет больше проблем, чем это стоит.

Ответ 4

Используя некоторые советы от Джесси, ответьте здесь, полный код.

Вам необходимо обновить параметр @match доменом вашего сайта

// ==UserScript==
// @name         Auto session extender
// @namespace    http://obive.net/
// @version      0.2
// @description  Automatically extend server-side session
// @author       Charlie Hayes
// @match        http://obive.net/
// @grant   GM_getValue
// @grant   GM_setValue
// @noframes
// ==/UserScript==

(function() {
    'use strict';

    console.log('The session for this site will be extended automatically via userscript.');

    var minute = 60*1000;
    var refreshTime = 15 * minute;

    var iframe = document.createElement("iframe");
    iframe.style.width = 0;
    iframe.style.height=0;

    var loc = window.location;
    var src = loc.protocol +'//' + loc.host + loc.pathname;
    src += loc.search ? (loc.search + '&') : '?';
    src +=  'sessionextendercachebuster=';

    var reloadIframe = function(){
        var time = new Date().getTime();
        var lastRefresh = GM_getValue('lastRefresh');
        var timeSinceLastRefresh = time - lastRefresh;
        if (!lastRefresh || timeSinceLastRefresh > refreshTime - minute) {
            console.log('Auto-extending session');
            iframe.src = src + time;
            GM_setValue('lastRefresh',time);
            setTimeout(reloadIframe, refreshTime);

            setTimeout(function(){
                // Unload the iframe contents since it might be taking a lot of memory
                iframe.src='about:blank';
            },10000);
        }else{
            console.log('Another tab/window probably refreshed the session, waiting a bit longer');
            setTimeout(reloadIframe, refreshTime - timeSinceLastRefresh - minute);
        }
    };
    setTimeout(reloadIframe, refreshTime);
    document.body.appendChild(iframe);
})();

Ответ 5

Я могу определенно рекомендовать решение, предлагаемое dreftymac!

Если вы не хотите беспокоиться о том, чтобы вспомнить, что нужно щелкнуть опцию reloadevery, ваша обезьяна-смазка script просто

window.location.href = window.location.href

Ответ 6

Предполагается, что вы не хотите, чтобы страница постоянно обновлялась, как это было предложено другими.

Обычно, если вы просто пытаетесь выполнить ping-сервер, вы, вероятно, лучше всего сделаете что-то вроде использования изображения, которое, как вам известно, существует на удаленном сервере, и проверьте его высоту - таким образом создавая трафик.

Однако, ваша проблема (я полагаю) должна получить доступ к некоторой ограниченной области веб-сайта, чтобы поддерживать сессию активным... при этом это происходит (и тот факт, что вы можете 't непосредственно ping), найдите страницу, которая "ограничена" и выполняет вызов Ajax или аналогичную. Не цитируйте меня на этом, так как я отнюдь не эксперт по JavaScript... просто выбрасываю потенциальное решение.