PHP - Trieda na správu sedenia

Programovacie jazyky, rady, poradňa...
__construct
Medium Expert
Medium Expert
Používateľov profilový obrázok
Príspevky: 108
Registrovaný: 23 sep 2009, 9:32
Bydlisko: Dark Side of The Moon
Kontaktovať používateľa:

PHP - Trieda na správu sedenia

Príspevok od používateľa __construct »

Problém spočíva v tom, že nedrží $_SESSION, prihlásenie prebehne OK, ale pri načítaní ďalšej stránky, sa musím znovu prihlásiť ..

Kód: Vybrať všetko

<?php

class Login {

    private $mysql;
    static $prihlaseny = 0;

    public function __construct($meno = NULL, $heslo = NULL) {
        if(!$this->skontroluj()){
            $this->mysql = new MySQL();
            $this->prihlas($meno, $heslo);
        }
    }
    private function prihlas($meno,$heslo){
        $meno  = $this->mysql->escape_string($meno);
        $heslo = md5($heslo);
        $dotaz = "SELECT `meno`,`prava` FROM `ucty` WHERE `meno` = '$meno' AND `heslo` = '$heslo'";
        $vysledok = $this->mysql->query($dotaz);
        if($vysledok->num_rows > 0){
            $riadok = $vysledok->fetch_object();
            $_SESSION['Uzivatel'] = array();
            $_SESSION['Uzivatel']['Meno'] = $riadok->meno;
            $_SESSION['Uzivatel']['Prava'] = $riadok->prava;
            $_SESSION['Uzivatel']['Cas'] = time();
            self::$prihlaseny = 1;
            return TRUE;
        }else return FALSE;
    }
    public function odhlas(){
        self::$prihlaseny = 0;
        unset($_SESSION['Uzivatel']);
    }
    private function skontroluj(){
        if (!is_array($_SESSION['Uzivatel'])) return FALSE;
        else if (is_array($_SESSION['Uzivatel']) && ($_SESSION['Uzivatel']['Cas'] < time()-1800)){
            $this->odhlas();
            return FALSE;
        }
        else if (is_array($_SESSION['Uzivatel']) && isset($_SESSION['Uzivatel']['Cas'])){
            self::$prihlaseny = 1;
            $_SESSION['Uzivatel']['Cas'] = time();
            return TRUE;
        }
    }
}
?>
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: PHP - Trieda na správu sedenia

Príspevok od používateľa audiotrack »

do konštruktoru daj ako prvý riadok session_start(). Potom ale tento súbor s triedou musíš includovať (a vytvárať jeho inštanciu) úplne na začiatku súboru. Ak to z nejakého dôvodu nemôžeš, tak daj session_start() osobitne na začiatok každého súboru
__construct
Medium Expert
Medium Expert
Používateľov profilový obrázok
Príspevky: 108
Registrovaný: 23 sep 2009, 9:32
Bydlisko: Dark Side of The Moon
Kontaktovať používateľa:

Re: PHP - Trieda na správu sedenia

Príspevok od používateľa __construct »

Díky .. Ja blbec som na to úplne zabudol :(

Ešte k tomu mám otázku :
keď si pozrieš metódu skontroluj používam tam na kontrolu prihlásenia is_array($_SESSION['Uzivatel']) - dalo by sa používať kontrolovanie statickej premennej ?
gwixt
Addict
Addict
Používateľov profilový obrázok
Príspevky: 3912
Registrovaný: 24 sep 2005, 16:50
Bydlisko: Trash-Can

Re: PHP - Trieda na správu sedenia

Príspevok od používateľa gwixt »

co myslis statickou premennou?
__construct
Medium Expert
Medium Expert
Používateľov profilový obrázok
Príspevky: 108
Registrovaný: 23 sep 2009, 9:32
Bydlisko: Dark Side of The Moon
Kontaktovať používateľa:

Re: PHP - Trieda na správu sedenia

Príspevok od používateľa __construct »

Namiesto static $prihlaseny = 0; by som na začiatok iba dal static $prihlaseny; a potom by som namiesto is_array($_SESSION['Uzivatel']) kontroloval či self::$prihlaseny == 1 .. Dúfam, že som sa vyjadril správne ..
gwixt
Addict
Addict
Používateľov profilový obrázok
Príspevky: 3912
Registrovaný: 24 sep 2005, 16:50
Bydlisko: Trash-Can

Re: PHP - Trieda na správu sedenia

Príspevok od používateľa gwixt »

to nepojde, potom by bola predsa session uplne zbytocna
co sa neuchova medzi dvoma http requestmi v session je nenavratne stratene
__construct
Medium Expert
Medium Expert
Používateľov profilový obrázok
Príspevky: 108
Registrovaný: 23 sep 2009, 9:32
Bydlisko: Dark Side of The Moon
Kontaktovať používateľa:

Re: PHP - Trieda na správu sedenia

Príspevok od používateľa __construct »

jj .. už som na to prišiel .. nenapadlo ma, že statická premenná uchováva hodnotu iba počas inštancie .. Keď prejdem na ďalšiu stránku, musím vytvoriť novú inštanciu a tým pádom aj nastaviť novú hodnotu tej statickej premennej ..
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: PHP - Trieda na správu sedenia

Príspevok od používateľa audiotrack »

môžeš si tú inštanciu serializovať a prenášať v cookies namiesto tých ostatných hodnôt. V tvojom prípade tým moc nezískaš, ale aj takáta možnosť tu je (a tá rieši práve to čo požaduješ s tou premennou)
gwixt
Addict
Addict
Používateľov profilový obrázok
Príspevky: 3912
Registrovaný: 24 sep 2005, 16:50
Bydlisko: Trash-Can

Re: PHP - Trieda na správu sedenia

Príspevok od používateľa gwixt »

na to aby si to mohol serializovat potrebujes ale vytvorit instanciu (alebo sa mylim?) .. a potom cela ta vec so static straca zmysel
Napísať odpoveď