Autor Zpráva
nowis
Profil *
Zdravím,

nějak mi přestalo fungovat zabezpečení stránek pomocí $_SESSION['authuser'].

Zadám přihlašovací údaje, ověřím je proti databázi a pokud je to správně, zobrazím zbytek stránky. Jenže jakmile překliknu na jinou stránku, nebo jen znovu načtu tu stejnou, proměnná $_SESSION['authuser'] se vymaže.

Přihlašovací formulář má nastaveno action="", to by snad ale nemělo vadit...
Myslím, že to mám řešeno celkem standardně:

session_unset(); 
    if ($_POST['loginout']=='Odhlásit') 
        {
            session_start();
            $_SESSION['authuser'] = 0;
        }
    if ($_POST['loginout']=='Přihlásit') 
        {
            session_start();
            $name = $_POST['login_name'];
            $pass = $_POST['login_pass'];
            $spojeni=MySQL_Connect('xxxxx','xxxxx','xxxxx');
                        MySQL_Select_DB('xxxxx');
                        mysql_set_charset("utf8");
            $dotaz = "SELECT * FROM  `users` WHERE  `username` = '$name'";
            $vysledek = mysql_query( $dotaz, $spojeni);
            
            while ($zaznam = MySQL_Fetch_Array($vysledek)) 
                {
                /*proměnná $pass se rovná tomu co bylo zadáno ve formulari s heslem*/
                if (($pass == $zaznam['heslo']) or ($_SESSION['authuser'] == 1)) 
                    {
                         $_SESSION['authuser'] = 1;
                    }
               else 
                    {
                           exit();
                    }
                }        
        }

Dík
panther
Profil
nowis:
na začátku smažeš všechny sessiony a nové nastavuješ jen v případě, kdy je odeslán formulář. Chová se to přesně tak, jak máš zapsáno.

Vyhoď první řádek, mělo by to fungovat (chyba je hned tady, další kód jsem tedy nestudoval - třeba bude další chyba i tam).
Johnik
Profil
Řekl bych, že to je tím session_unset(); a nebo tím, že session startuješ jen při nějakých POST datech.
nowis
Profil *
panther:
jj, dík, už mě to ale taky napadlo, tak jsem to zakomentoval a nefunguje to stále... Takže bude problém i někde dále
panther
Profil
nowis:
máš na začátku každé stránky, kde se session pracuješ, session_start? Mimoto, jak zmínil Johnik, session_start by i zde mělo být nad případných session_unset.
nowis
Profil *
Johnik:
Vypadá to, že máš pravdu. Zrušil jsem session_unset() a session_start() jsem dal na začátek a už si to pamatuje. Jen teď nevím, kam teď správně zařadit session_unset()
panther
Profil
nowis:
Jen teď nevím, kam teď správně zařadit session_unset()
tam, kde ho chceš využít. Proč máš potřebu sessiony mazat? Pokud chceš kontrolovat, zda nějaká už neexistuje, kontroluj ji. Mazat všechny a pak je nastavovat je... divné.
nowis
Profil *
...aha dík, popravdě jsem nepátral k čemu to je, považoval jsem to za nějakou nutnost, než se začne se session pracovat tak to vše vynulovat, ale nevěděl jsem, jak to přesně funguje.

Takže smysl to má asi u odhlášení, případně při první načtení stránky, ale to nevím, jestli jde nějak identifikovat

Díky za rychlou pomoc pánové
panther
Profil
nowis:
při odhlášení stačí většinou ničit session, která indikuje přihlášeného uživatele. Záleží na konkrétním případu.

popravdě jsem nepátral k čemu to je
příště pátrej alespoň trochu, obzvláště, když ti něco nefunguje. K čemu daná funkce slouží dohledáš v manuálu během pár sekund.
nowis
Profil *
panther:
Máš pravdu, zasloužím si :-)
Akorát já nevěděl, že se mám zaměřit zrovna na session_unset(). Spíš jsem myslel, že je chyba nekde v konceptu...
panther
Profil
nowis:
nejde o to, kde byla chyba, ale o to, že používáš (=odněkud jsi zkopíroval?) kus kódu, o kterém nevíš, co znamená. Začít bys tedy měl u něj.

Problém je vyřešen, netřeba o tom dále hovořit. Víš, na co se máš zaměřit příště :-)

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: