Использование 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... просто выбрасываю потенциальное решение.