Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem 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?

Předmět Autor Datum
(pane) Anička. Co vím, tak se to řeší daleko jednodušeji a spolehlivěji i výhradně server-side skrip…
Flash_Gordon 10.03.2008 12:15
Flash_Gordon
(pane) Anička. Co to má být? ::)
MaSo 10.03.2008 12:20
MaSo
A nebo jestliže je trváno na JS, tak je možné do každé stránky vložit něco takového: setTimeout ( "…
Flash_Gordon 10.03.2008 12:26
Flash_Gordon
Já nepotřebuju po uplynutí x minut. Já potřebuju, aby když klikne na ikonu logout, tak aby ho to vyk…
Anicka 10.03.2008 14:19
Anicka
:-( Jestliže vyžaduješ funkcionalitu, kterou ta aplikace nemá, tak ji nějakým způsobem prostě modifi…
Flash_Gordon 10.03.2008 14:34
Flash_Gordon
Vyskúšal som to ClearAuthenticationCache v IE6 a IE7 - funguje v obidvoch. Ten druhý spôsob som vysk…
los 10.03.2008 13:17
los
Ve stránce je tohle: <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control"…
Anicka 10.03.2008 15:08
Anicka
Aha, ale ClearAuthenticationCache sa používa pri HTTP Basic autentifikácii. Pri autentifikácii s po…
los 10.03.2008 15:49
los
Můžeš to event. vyzkoušet na www.bizdata.cz Kliknout na PZ-online Slavia vývoj (3. ikonka v prvním ř…
Anicka 10.03.2008 15:27
Anicka
To odhlásenie vyzerá, že funguje. Jediný problém je to, že pri stlačení Späť sa načíta tá stránka z…
los 10.03.2008 16:10
los
Bohužel to nepomohlo :.(. poslední
Anicka 14.03.2008 17:07
Anicka

(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.

:-( Jestliže vyžaduješ funkcionalitu, kterou ta aplikace nemá, tak ji nějakým způsobem prostě modifikovat musíš.

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:

<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="cache-control" content="no-store">
<meta http-equiv="cache-control" content="must-revalidate">
<meta http-equiv="cache-control" content="proxy-revalidate">

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...

Zpět do poradny Odpovědět na původní otázku Nahoru