Autor Zpráva
Mufna
Profil
Zdravím Vás. Už nějaký čásek se vrtám v hlavním skriptu (admin.php) k poměrně jednoduché administraci, ale nemůžu pořád dosáhnout toho, aby byl uživatel bezpečně odhlášen. Odhlášení je provedeno pomocí odkazu admin.php?logout z hlavního menu (to se načítá pomocí funkce z admin_html.php). Menu se zobrazuje teprve poté, co se uživatel úspěšně přihlásí. To mi funguje. Ale když se odhlásí, tak mu vyskočí hláška a znovu přihlašovací formulář, ale když se hned následně pomocí "Zpět" v prohlížeči přesunu na přechozí stránku, tak její platnost sice vypršela, ale když dám "Aktualizovat", tak se menu vesele objeví a vše se chová, jako kdyby byl uživatel přihlášen. Poradíte mi někdo, co s tím můžu udělat ? Jen pro úplnost uvádím, že se mi to takhle chová ve stařičkém a nijak zvlášť záplatovaném IE6. Včera jsem to zkoušel v Opeře 9 (možná ten skript byl maličko jiný, už ani nevím), a tam to vypadalo, že to možná je OK (ale nevím to na 100%).


<?php
session_start();
require("admin_html.php");

wrt_admin_header();

if (isset($_POST["login"])) {
if (strlen($_POST['username']) == 0 || strlen($_POST['passwd']) == 0) {
echo '<div class="error_msg">ChybnĂ&copy; uĹľivatelskĂ&copy; jmĂ&copy;no a (nebo) heslo!</div>';
} else {
require_once ("initdb.php");
$res=query("SELECT * FROM ".$tbl_prefix."login WHERE ".$tbl_prefix."login.user='".addslashes($_POST["username"])."' AND ".$tbl_prefix."login.passwd=MD5('".addslashes($_POST["passwd"])."')");
if (mysql_num_rows($res)>0) {
$row=mysql_fetch_array($res);
session_register("user");
session_register("login_date");
session_register("last_time");
session_register("last_from");
$_SESSION["user"]=$row["user"];
$_SESSION["login_date"]=date("j.n.Y H:i:s");
$_SESSION["last_time"]=$row["last_time"];
$_SESSION["last_from"]=$row["last_from"];
query("UPDATE ".$tbl_prefix."login SET last_time=NOW(),last_from='".$ip."'");
} else {
echo '<div class="error_msg">ChybnĂ&copy; uĹľivatelskĂ&copy; jmĂ&copy;no a (nebo) heslo!</div>';
}
}
}

if (isset($_GET["logout"])) {
session_unregister("user");
session_unregister("login_date");
session_unregister("last_time");
session_unregister("last_from");
$_SESSION = array(); // Vymaze vsechny promenne
session_destroy();
}

if ($_SESSION["user"]) { Tady zkouším podmínku, aby se menu načetlo jen tehdy, pokud existuje proměnná sezení - do ní jsem dal uživatelské jméno
wrt_admin_menu(0);
wrt_admin_footer();
exit;
}

wrt_login_form();
wrt_admin_footer();
sh00ter
Profil
ja teda sice nemam tedka nainstalovanej IE6, mam jen 7, ale provadim odhlasovani jednoduse pomoci session_destroy() a i kdyz dam v ie7 nebo ff, jinej prohlizec nemam, a i kdyz dam zpet tak je to bez session...
Mufna
Profil
Tak přemýšlím, jestli to nějak nesouvisí s cachováním v prohlížečích. Např. v tý Opeře to vypadalo tak, že po odhlášení jsem se pomocí zpět úplně bez problémů dostal na předchozí obrazovky, ale jakmile jsem chtěl provést nějakou akci, tak se vyhodnotila úvodní podmínka ve všech skriptech, tj.

session_start();
if (!isset($_SESSION["user"])) {
  Header("Location: admin.php");
  exit;
}



a byl jsem přesměrován na úvodní stránku, kde už se bez zadání logovacích údajů dovnitř dostat nešlo. Operu jsem nainstaloval již před nějakým tím pátkem a dosud jsem se nijak v jejích defaultních nastaveních nevrtal.

V IE6 však kliknu na cokoliv v menu a už to "jede" jako bych byl přihlášen. IE6 ale zase nezobrazuje všechny předchozí stránky, ale když jich po přilogování projedu třeba deset, tak po odlogování a pokusech se "Zpět" mi to několikrát nevyhodí nic, ale vždy se tam najde nějaká předchozí stránka, která mě dovnitř pustí.
Mufna
Profil
Tak jsem to teď zkoušel v FF2, a je to to samý jako v IE6. Hodí mi to jen varovnou hlášku, že "stránka obsahuje POSTDATA, jejich platnost již vypršela atd. atd.". Takže bych se měl asi těch POSTDAT nějak skriptem zbavit. Ale jak ? Asi by pomohlo přesměrování, ale to mi zde nějak nejde udělat (nevím, kam bych vrazil wrt_admin_header). Už jsem s tím skriptem všelijak šachoval, ale vždy to mělo nějaké mouchy.
Mufna
Profil
Tak už jsem to vyřešil.
Toto téma je uzamčeno. Odpověď nelze zaslat.