Refresh stránky po automatickém odhlášení
- jedlicka
- Člen | 70
Ahoj,
mám nastavené session na 2h. Pokud není uživatel po dobu 2h aktivní, tak se automaticky provede odhlášení z aplikace.
Problém ale je ten, že pokud uživatel neaktualizuje stránku, tak se to nedozví, že byl odhlášen (a občas se stane, že po automatickém odhlášení pokračuje v editaci formuláře, ale zjistí to až ten formulář zkusí odeslat). Jde mi tedy o to, jak udělat, aby se mu po automatickém odhlášení, aktualizovala stránka a jasně viděl, že byl odhlášen.
Děkuji za rady.
Martin
- Kamil Valenta
- Člen | 820
JavaScriptem. Který si bude počítat čas od načtení (pozor, nulovat při
ajaxu).
Nebo si před odhlášením uchovat request a po přihlášení udělat jeho
restore, čímž zachováš i odeslaný POST.
- dakur
- Člen | 493
Pepino napsal(a):
Můžeš JS nastavit timer který např. co minutu zavolá na ajax request který čekne jestli jsi přihlášený.. Pokud ne přesměruješ stránku.
Tohle podle mě session akorát prodlouží, protože i ten async request je posílán s danou session cookie. Nešlo by se spíš v JS ptát, jestli session cookie už neexpirovala?
Jinak ale ten redirect s backlinkem mi přijde dobrý, backlink ukládá i POST, takže o text z formuláře uživatel nepřijde.
Editoval dakur (1. 6. 2022 16:02)
- Kcko
- Člen | 468
Mám to v jednom starším webu řešené tak jak se zmínil @Pepino
v adminku v @layout.latte
{if $presenter->getName() != 'Admin:Sign'}
<div id="inactivity-logout" data-time="{= 1000 * 60 * 10}" data-url="{plink Sign:inactivityOut}"></div>
{/if}
JS
if ($('#inactivity-logout').length) {
var logoutInterval;
var debounce;
var logout = function () {
console.log('spousti se timeout na odhlaseni');
logoutInterval = setTimeout(function () {
console.log('ODHLASENI');
window.location.href = $('#inactivity-logout').data('url');
}, $('#inactivity-logout').data('time'));
};
logout();
$(document).on('keyup mousemove paste change click focus scroll', function (e) {
clearTimeout(debounce);
clearTimeout(logoutInterval);
console.log('clear');
debounce = setTimeout(function () {
logout();
}, 500);
});
}
Odhlášení
public function actionInactivityOut()
{
$this->getUser()->logout(TRUE);
$this->flashMessage('Byl(a) jste odhlášen(a) z bezpečnostního důvodu díky časové inaktivitě.');
$this->redirect('in');
}
- Pepino
- Člen | 257
dakur napsal(a):
Pepino napsal(a):
@dakur nemusí se volat aplikace, ale nějaká extra stránka.
Pak si ale session id uživatele musíš poslat v request body a nějak to dohledat.. Je to možnost. 🙂
Na jednom starším webu jsem to vytahoval ze session
$_SESSION['__NF']['DATA']['Nette.Http.UserStorage']['authenticated']
ale nevím jak to funguje na jaké verzi.
Editoval Pepino (1. 6. 2022 19:05)