Autor Zpráva
eda
Profil
zdravím, na jedné stránce mi blbne přihlašování. Je to nová stránka, kde to fungovalo bez problému asi měsíc, ale to nějak začlo blbnout.
Normálně se přihlásím, to jde, nastavím si cookies s $id uživatele. ale potom ať kliknu na jakejkoli odkaz, tak se to automaticky odhlasí (poznám to podle tlačítka "přihlásit", které se změní na "odhlásit"), jenže po kliknutí zase na jiný odkaz se to třeba naprosto nevysvětlitelně zase "přihlásí", chová se to nepředvídatelně. Nevím co mám dělat, na mým domácím serveru mi to funguje bez problému, ale na serveru od cesky-hosting.cz to takhle blbne. Nevím jestli je to jejich vina nebo moje. Jinak mimochodem session byly zrušený od 5. verze PHP nebo ne? někde jsem slyšel že jo, ale podle php.net to vypadá že furt "jedou"....

díky za pomoc
candiess
Profil
eda:
Session byly zrušený od 5. verze PHP nebo ne?
Určitě ne, dnes by na tom vyhořela každá aplikace.

jenže po kliknutí zase na jiný odkaz se to třeba naprosto nevysvětlitelně zase "přihlásí",
a máte session_start() na každé stránce? máte ty hlavičky před jakýmkoliv výstpem? bez kódu na to nepříjdem..
eda
Profil
No já to mám právěže přes cookies.

Toto mám v indexu:

if ($id=IDuzivatele($_POST["jmeno"], $_POST["heslo"], $link))

if ($id<>0)
{
setcookie("id", $id, time()+3600);
$_COOKIE["id"]=$id;

}

if ($_GET["clanek"]=="prihlasit")
{

if ($id<>0) $_COOKIE["id"]=$id;
    

}

if ($_GET["clanek"]=="odhlasit")
{
setcookie("id", $id, time()-3600);
unset($_COOKIE["id"]);
unset($id);
}


Toto mám v souboru prihlasit.php:

if (!empty($_POST["prihlasit"]))
  {
     if (($_POST["jmeno"]=="XXX") and ($_POST["heslo"]=="XXX"))
     {
    
     
        
    
     
     $zobrazovat=false;
     echo "<p align=\"center\">byl/a jste přihlášen/a</p>";
     
     }
     else
     {
     echo "přihlášení se nezdařilo";
     }
  }

Vím, že by to asi nemělo být napsáno přímo v kódu. přihlašovací jméno a heslo, ale je tam jenom 1 uživatel. Nebo je to opravdu tak nebezpečné?

A funkce IDuzivatele:

function IDuzivatele($prezdivka, $heslo, $link)
{
if ($vysledek=mysqli_query($link, "select id from uzivatele where jmeno='".$prezdivka."' and heslo='".$heslo."'"))
if (mysqli_num_rows($vysledek)>0)
{
while ($zaznam=mysqli_fetch_array($vysledek))
 {

$id=$zaznam["id"];
 }

return $id;
}


}


Zvláštní taky je, že dneska se odkazy, podle kterých to bylo odhlášených, změnili na "přihlášený". Dělá si to co chce, nevidím v tom žádnou programátorskou logiku...
candiess
Profil
eda:
if ($id=IDuzivatele($_POST["jmeno"], $_POST["heslo"], $link))
Jste si jistý, že je podmínka správně? Ona bude vždy správná, protože nic neporovnává ale přiřazuje hodnotu a to je vždy true...

if($id == ID....) //Dvě rovnítka porovnávají
eda
Profil
Máte pravdu, bylo to tím, díky za odpověď.

Teď mi tam ale nefunguje odhlašování... při kliknutí na odhlásit se mi to odhlásí, ale po opětovném kliknutí na jakýkoli odkaz se to opět "přihlásí".

Nejsem si jistý jestli příkaz unset($id) funguje tak, že zruší proměnnou $id. Pravděpodobně ne. Říkal jsem si, že bych mohl při odhlášení přiřadit proměnné $id nulu. Nebo poradíte mi s nějakým lepším řešením? díky
candiess
Profil
eda:
unset($id)
To se zruší lokáln í proměnná, vy toho uživatele držíte v COOKIE, proto musíte zrušit platnost této cookie -> setcookie() a čas nastavit na 0
eda
Profil
candiess:
díky za odpověď

No jo, držím ho v cookies, ale pokud se $id nerovná nule, tak se ty cookies opět obnoví. Takže když zruším cookies, čímž zruším $_COOKIE["id"], tak se tim zrusi i promenna $id?

A cookie zruším tak, že jí čas time() nastavím do záporných hodnot tzn. setcookie("id", $id, time()-3600) Je to tak?
candiess
Profil
Máte v tom velký rybník, kombinace CZ a EN... koukněte zde Nejčastější potíže s PHP (FAQ) » Registrace uživatelů

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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

0