
Odlogování pomocí js
Mám aplikaci napsanou v LANSE. Ta má standardní lansácký login. Ten nemám možnost změnit. Potřebuju udělat logout (ten žel standardní nemá). A to tak, aby prohlížeč zapomněl všecky vyplněné údaje a při pokusu o uživatele dostat se zpět např. pomocí tlačítka Back vyžadoval opětné zadání jména a hesla. Nejlépe v js, event. v PHP. Musí fungovat v IE 6+, ale i v dalších hlavních prohlížečících (FF, Opera...).
Pro IE 7 funguje tohle:
document.execCommand("ClearAuthenticationCache");
Bohužel ačkoli Microsoft tvrdí, že to má fungovat v IE 6, tak v 6 to nefunguje , jen v 7.
Pro neIE prohlížeče jsem našla několik tipů, např.:
function createXMLObject() {
try {
if (window.XMLHttpRequest) {
xmlhttp = new XMLHttpRequest();
}
// code for IE
else if (window.ActiveXObject) {
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
} catch (e) {
xmlhttp=false
}
return xmlhttp;
}
// Let's create an xmlhttp object
var xmlhttp = createXMLObject();
// Let's get the force page to logout for mozilla
xmlhttp.open("GET",".force_logout_offer_login_mozilla",true,"logout","logout");
// Let's send the request to the server
xmlhttp.send("");
// Let's abort the request
xmlhttp.abort();
// Let's redirect the user to the main webpage
window.location = "www.seznam.cz";
ale to mi nefunguje ani v FF, ani v Opeře .
Nemáte někdo tip na kód, který by opravdu fungoval?
(pane) Anička.
Co vím, tak se to řeší daleko jednodušeji a spolehlivěji i výhradně server-side skriptovací technologií.
Fint je na to určitě dost.
Co mě napadá "spatra" je zapisovat u přihlášeného uživatele čas posledního požadavku (do session nebo ještě bezpečněji do databáze).
Jestliže časový rozdíl bude např. delší jak 10. minut, tak ho přesměruješ na stránku, která ho odhlásí a napíše mu, že byl pro delší neaktivitu odhlášen, ať se přihlásí znova.
Co to má být?
A nebo jestliže je trváno na JS, tak je možné do každé stránky vložit něco takového:
Já nepotřebuju po uplynutí x minut. Já potřebuju, aby když klikne na ikonu logout, tak aby ho to vykoplo někam a okamžitě to zapomnělo všecky jeho přihlašovací údaje. A nemám možnost měnit přihlašovací skript a session.
Buďto použiješ to co píše los a nebo si zjistíž v jak nazvaných session jsou uloženy ty přihlašovací údaje a vymažeš je.
I když to nemusí být zrovna jednoduché, tak samo se to neudělá.
Další možnost je, já nevím, vložit nahoru rámec obsahující odkaz na tvůj skript,
přičemž "hlavní" aplikace by běžela v hlavním (velkém) rámci a ten vrchní by sloužil výhradně k odhlášení.
Víc ti takhle asi nikdo neřekně.
Vyskúšal som to ClearAuthenticationCache v IE6 a IE7 - funguje v obidvoch. Ten druhý spôsob som vyskúšal vo FF a fungoval. Operu nemám k dispozícii a predpokladám, že tam to fungovať nebude.
Nevypisuje IE6 a FF nejakú inú chybu, kvôli ktorej to nejde (pretože by to tam malo fungovať)?
Ak testuješ, či to funguje alebo nie tak, že stlačíš tlačidlo Späť, tak to môže zobraziť predchádzajúcu stránku z keše. Ak nechceš stránky kešovať, tak musíš nastavovať správne HTTP hlavičky.
Ve stránce je tohle:
Přesto když se tam pokusím vrátit pomocí tlačítka Back, tak to s výjimkou IE 7 nevyžaduje opětovné zadání jména a hesla. Má tam být ještě něco dalšího?
Ve FF to funguje jen pokud zadám ručně na Vymazat vyrovnávací paměť a Vymazat relace s autentizací. Musím vymazat ručně oboje. Přitom to by měl dělat přece skript. Do chybové konzole se nenapíše nic.
Aha, ale ClearAuthenticationCache sa používa pri HTTP Basic autentifikácii.
Pri autentifikácii s použitím session ti nezostáva nič iné, len dať na server skript, ktorý tú session zruší (viď napr. session_destroy + komentáre).
Edit: Aha, teraz som si pozrel tú stránku, takže to nie je cez session. Ešte sa na to pozrem lepšie...
Můžeš to event. vyzkoušet na
www.bizdata.cz
Kliknout na PZ-online Slavia vývoj (3. ikonka v prvním řádku)
To odhlásenie vyzerá, že funguje. Jediný problém je to, že pri stlačení Späť sa načíta tá stránka z keše.
Skúsil by som nastaviť do hlavičky Cache-Control ešte pre-check=0, post-check=0, max-age=0.
Bohužel to nepomohlo
.