NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: Login v PHP, $_SERVER[HTTP_REFERER], Cookies (interakce)

V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
VelkyBubak
Člen
Avatar
VelkyBubak:20.9.2017 10:21

Přihlašování:

if (!empty($_POST["nick"]) and !empty($_POST["heslo"])) {
        ... (dotaz na db pro ověření údajů)

        if (...) {//heslo a nick ok?
                $res = mysql_fetch_array($sql);

                $hash = hash(...);
                setcookie(...);

                Login(...);//nastavení $_SESSION

                $data = serialize(array(...));
                setcookie("Uzasnacookie", $data, time() + (60 * 60 * 24 * 7), "/", "adresa.cz");

                if ($res["id_opravneni"] == "|20|" or $res["uziv_ov"] == "1") {
                        header("Location:https://uzasna.adresa.cz/xyz"); exit;
                } else if (!empty($_SERVER["HTTP_REFERER"])) {
                /*bez této větve naskočí bez $_SERVER["HTTP_REFERER"] varianta bez (!empty($_POST["nick"]) and !empty($_POST["heslo"])), bez ohledu na to, zda byla údaje byly či nebyly zadány!!*/
                        header("Location:$_SERVER[HTTP_REFERER]"); exit;
                } else {
                        header("Location:https://uzasna.adresa.cz"); exit;
                }
        }

} else {//##B
                $chyba .= "Nebylo vyplněné uživatelské jméno, nebo heslo.<br />";
}

Odhlašování:

setcookie(...);
unset($_SESSION);
session_destroy();
session_write_close();
if (!empty($_SERVER["HTTP_REFERER"])) {
        header("Location:$_SERVER[HTTP_REFERER]"); exit;
} else {
        header("Location:https://uzasna.adresa.cz"); exit;
}

bez větve if (!empty($_SER­VER["HTTP_REFE­RER"])) se při neexistenci $_SERVER[HTTP_RE­FERER] (což se mi stává při prohlížení stránek FF(na verzi asi nesejde) s automatickým blokováním všech cookies a povolením těch pár co potřebuji pomocí rozšíření cookie keeper):
u přihlašování automaticky naskočí na větev bez zadání údajů ##B, bez ohledu na to zda byly zadány, nebo zda jsou ok
u odhlašování se v prohlížeči zobrazí informace o smyčce při přesměřování

Zajímalo by mě čím může takové chování být způsobeno

 
Odpovědět
20.9.2017 10:21
Avatar
Jirka Jr
Člen
Avatar
Odpovídá na VelkyBubak
Jirka Jr:23.9.2017 13:38

neni https://uzasna.adresa.cz zaroven prihlasovaci stranka?

jaky je kod predchazi zde zverejnenemu prihlasovacimu?

 
Nahoru Odpovědět
23.9.2017 13:38
Avatar
VelkyBubak
Člen
Avatar
Odpovídá na Jirka Jr
VelkyBubak:23.9.2017 17:23

Podle toho jak to bereš. Výše je mírně upravený kód z login.php na který odkazuje přihlašovací formulář:

<form action="<?php echo "https://uzasna.stranka.cz/login.php" ?>" method="post" id="prihlaseni">
<p>
<span>Uživatelské jméno:</span> <input type="text" name="nick" /><br />
<span>Heslo:</span> <input type="password" name="heslo" /><br /><br />
<input type="submit" name="prihlasit" value="Přihlásit" /><br />
</p>
</form>

a taktéž z odhlasit.php, které se přímo spouští (odkazem) tak jak je.

Nicméně mě ani tak nejde o řešení, spíše by mě zajímalo čím by to mohlo být způsobeno.

Editováno 23.9.2017 17:24
 
Nahoru Odpovědět
23.9.2017 17:23
Avatar
Jirka Jr
Člen
Avatar
Odpovídá na VelkyBubak
Jirka Jr:23.9.2017 22:40

a jeste takova provokativni otazka:

pred tim kodem v login.php

if (!empty($_POST["nick"]) and !empty($_POST["heslo"])) {

mas test na odeslani formulare? tj neco jako tohle?

if(!empty($_POST['prihlaseni']))

tento if by mel uzavirat cely kod login.php, ktery jsi tu uverejnil

pokud ne, tak tipuju, ze po odhlaseni to skoci na index.php, tam se zjisti, ze cookie neni (uzivatel neni prihlasen) a jak se to vetsinou dela, presmeruje to na login.php, kde logicky nic neni v $_POST a jde to do vetve s hlaskou o nevyplnenem uzivateli a heslu

je mozne, ze tam ten test na formular mas a je to skutecne zahada browserolamu ... v takovem pripade se omlouvam za skoleni ;-)

jen se pojistuju proti nechtenemu vodeni za nos, ktere uz jsem si hodnekrat uzil ;-)

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
 
Nahoru Odpovědět
23.9.2017 22:40
Avatar
VelkyBubak
Člen
Avatar
Odpovídá na Jirka Jr
VelkyBubak:28.9.2017 14:42

Děkuji za odpověď i za školení. Je dobré chápat jak to pracuje ;)

 
Nahoru Odpovědět
28.9.2017 14:42
Avatar
Jirka Jr
Člen
Avatar
Odpovídá na VelkyBubak
Jirka Jr:28.9.2017 14:45

rád jsem pomohl ... aspoň je pro co žít ;-)

 
Nahoru Odpovědět
28.9.2017 14:45
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 6 zpráv z 6.