Autor Zpráva
tatyalien
Profil
Dobrý den, mám ještě dotázek ohledně odhlášení uživatele adminem na tvrdo (pro případ, že bych udělal nějakou hlavní změnu v db, skriptech atd a potřeboval bych, aby se uživatel odhlásil a přihlásil.

Jde mě o to, že při přihlášení si hodím u uživatele do session data, které pak dále využívám pro běch stránek, například:

function fun_prihlaseni($prezdivka, $heslo) {
/**
 Tato funkce si vytáhne z DB uživatelů sloupeček ID, USER, ADMIN
 ID je unikátní číslo uživatele
 prezdivka - přezdívka
 USER hodnoty:
 0 - čerstvě založený uživatel, nemá žádná práva, jen se mu zobrazí formulář se žádostí o přidělení práv
 1 - přidělené práva na vytváření reklamací a čtení
 ADMIN hodnoty:
 0 - normální uživatel (bez admin práv)
 1 - admin 1 úrovně
 2 - admin 2 úrovně
 Tytot hodnoty ukládám do sessionu id, user_uroven, admin_uroven a email_odeslan Tyto sessiony budu používat v průběhu stránek.   
 */
    $vysledek=mysql_query("SELECT id, prezdivka, user, admin, pobocka_uzivatele FROM ".$GLOBALS["TB_uzivatele"]." WHERE prezdivka='".saveDB($prezdivka)."' and heslo='".saveDB(md5(trim($heslo)))."'", $GLOBALS["link"]);
    if (mysql_num_rows($vysledek)==0)
        return false;
    else {
        $radek = mysql_fetch_array($vysledek);
        if ($radek["id"]<>0) {
            $_SESSION["id"] = $radek["id"];
            $_SESSION["user_prezdivka"] = $radek["prezdivka"];
            $_SESSION["user_uroven"] = $radek["user"];
            $_SESSION["admin_uroven"] = $radek["admin"];
            $_SESSION["email_odeslan"] = "ne";
            if ($radek["pobocka_uzivatele"] != '') {
                // pokud uživatel má zvolenou pobočku, nastavím mu jí pro skript
                $_SESSION["user_pobocka"] = $radek["pobocka_uzivatele"];    
            } else {
                // jinak nastavuji defaultní hodnotu, která je nastavena pro celou reklamaci
                $_SESSION["user_pobocka"] = $GLOBALS["nase_spolecnost"];   
            }  
        }
    }
}


pokud bych třeba následně změnil pobočku uživatele, tak v DB mu jí změním, ale uživatel má stále hozenou pobočku v Sessionu, jde to nějak udělat, nebo to budu muset překopat dle návrhů co mě dohodíte :-)
fritol33
Profil
tatyalien:
Každopádně bych (například) do indexu sepsal nějaký znovu-přihlašovací script, kde použiješ např. session_destroy nebo jen jednoduše přepíšeš již použité proměnné
edit: Vycházím z toho, že index je přítomný v celé aplikaci - pokud ne, musel by jsi na něj odkázat na všech stránkách
Lamicz
Profil
Pri kazdym refreshi stranky (kliknuti na neco) v adminu se provede SQL dotaz, ktery zkontroluje u lognutyho usera nejaky parametr, treba "je_validni" s default 1. Ty budes mit v adminu akci, ktera nastavi tento parametr na 0 podle jeho id a tim SQL dotaz u dotycnyho neprojde a automaticky ho odhlasis.
tatyalien
Profil
vsechny session jsou prez index reseny, takze pak jsou pro všechny "podstránky" k dispozici. Takže pokud si udělám kontrolu před spuštěním jakéhokoliv skriptu (zásahu do db atd) zda má nastaveno v db že se má uživatel na tvrdo odhlásit, tak dát session_destroy? Tím by se mu pak nezobrazilo nic a musel by se prihlásit... nebyl jsem si jistej, zda to session destroy na tohle projde.
fritol33
Profil
Já bych to nejlépe vyřešil tak, že by každá editace v administraci měla své identifikační číslo (třeba pomocí time()) a při každém přihlášení by se do sessionu uživatele uložila verze... Když bys pak udělal novou verzi, změníš číslo a přihlášeného uživatele testuješ, zda má shodnou. Jestli nikoliv načteš znovu data do session... Např.
if($_SESSION["version"] != $row->version) {
... kód ...
}
tatyalien
Profil
fritol33:
Asi to udělám dle tvého návrhu, u změn přez administraci (u důležitých změn co se generují při přihlášení) si uložím datum s časem změny a budu to tak kontrolovat.

Možná bude pohodlnější mu na pozadí načíst "nové" udaje a nenutit uživatele se znova přihlásit.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: