Autor Zpráva
soucekgns
Profil
Potřebuji, aby při odeslání $_POST['username'] se uložilo do $_SESSION, ale nadále zůstalo uložené jako (např.: NOVAK) a ne jako nic "".
Odkaz Jméno: soucek_do; Heslo: aktenis
(nad sloupečkem aktuality se zobrazí, $_SESSION (pokud se tedy nerovná "")
    if (!$need_login) {
        session_start();
        $_SESSION['username']=$_POST['username'];
        $username=$_SESSION['username']; 
    }

Díky za rady
Tori
Profil
soucekgns:
session_start() by mělo být na začátku skriptu, ne někde okolo 70.řádku (vizte ty chybové hlášky, když se přihlásíte a kliknete na nějakou stránku z menu), a určitě ne v podmínce, která se může nesplnit.
soucekgns
Profil
Tori:
Samozřejmě že je na správném řádku... (mluvme pouze o index.php!)
vše funguje ale potřebuju to post uložit natrvalo
celý script:
    if (!$need_login) {
        session_start();
        $_SESSION['username']=$_POST['username'];
        $username=$_SESSION['username']; 
    }
    else {
        session_start();
        unset($_SESSION['username']);
    }
Tori
Profil
soucekgns:
if (!$need_login)
Kdy je tato podmínka splněná? Na čem závisí? Nemůže vám to padat do else i když nechcete?

(mluvme pouze o index.php!)
Oki, takže přihlásím se, kliknu na odkaz na index.php (anebo obnovím stránku) a jsem odhlášená - má se to tak chovat?
soucekgns
Profil
Teď už to je kompletní a při přihlášení si můžete přečíst, co platí
ale samozřejmě platí if ($username=="") header(logout.php)
-> ta podmínka a všechno ostatní je napsáno správně, já jen potřebuji uložit post do session
soucekgns
Profil
Tori:
Oki, takže přihlásím se, kliknu na odkaz na index.php (anebo obnovím stránku) a jsem odhlášená - má se to tak chovat?
to je právě to if ($username=="") header(logout.php)
proto potřebuji uložit post username do session aby se $username!=""
-> a chovat se to tak samozřejmě nemá:-)
Tori
Profil
soucekgns:
if ($username=="")
hm, nespoléháte na register_globals = On, že ne? (na wedosu jsou vypnuté). Nemůžete číst rovnou ze session
if (!isset($_SESSION['username']) || empty($_SESSION['username'])) 
?
soucekgns
Profil
Hm... to jsem přehlédl, a jde to udělat tedy jinak?
tatyalien
Profil
To co psal Tori, session_start() v indexu, úplně jako první věc.
Joker
Profil
soucekgns:
Já už nevím. Minule jsem psal, že session_start() má být co nejvíc na začátku, přidal jsem to i do FAQ. Dále jsem se podivoval nad konstrukcí: if(podmínka) /* kód */; else /* stejný kód */.
Další dotaz- a je to pořád stejné. A zase to může být příčina problému.
Komu není rady, tomu není pomoci.
soucekgns
Profil
Joker:
Mě rady je a příčina problému to není!
Problém
Důvodem je register_globals = off
Joker
Profil
soucekgns:
příčina problému to není!
Ale není to správně a mohla to být příčina problému. A když to takhle zůstane, skoro určitě to ještě příčinou nějakých problémů bude.

Důvodem je register_globals = off
Spíš naopak, register_globals=off je správně (v budoucnu bude register_globals z PHP odstraněno úplně), příčinou chyby je, že spoléháte na register_globals=on :-)
Tori
Profil
soucekgns:
Mě rady je a příčina problému to není!
Řekla bych, že Joker ví, o čem mluví, no ale když myslíte...

> „if ($username=="") header(logout.php)
> -> ta podmínka a všechno ostatní je napsáno správně, já jen potřebuji uložit post do session
[...]
> proto potřebuji uložit post username do session aby se $username!=""

Jen se chci ujistit, že správně chápu použitou logiku: Aby byl uživatel přihlášen, musí být definované $_SESSION[username]. Pokud se vyprázdní nebo zruší, uživatel je odhlášen. Je to tak?
Přijde mi to dost náchylné k chybám, spíš bych nechala data v session být a dala uživateli odkaz na odhlašovací skript. Ten by také zrušil klíč $_SESSION[username], ale příčina a následek jsou v opačném pořadí - nemusím se snažit u každého požadavku zabránit odhlášení (=výchozí stav u vás je "odhlásit uživatele"), ale naopak: výchozí stav je "uživatel přihlášen" a odhlásím ho jen když si o to řekne.
soucekgns
Profil
Ok.... tak jsem to zkusil pře cookies
    if (!$need_login AND isset($_POST['username'])) {
        setcookie('login',$_POST['username'],Time()+60);  
    }
    $username = $_COOKIE['login'];

Ale proč to funguje až po prvním neúspěšném přihlášení?
soucekgns
Profil
sorry funguje to normálně ale s $_POST['username']!=''
Tori
Profil
soucekgns:
tak jsem to zkusil pře cookies [...] Ale proč to funguje až po prvním neúspěšném přihlášení?
Cookies tak prostě fungují - prohlížeč je odesílá spolu s požadavkem na server. Takže na časové ose to zjednodušeně vypadá takto:
* Prohlížeč pošle na server požadavek + všechny cookies, které má pro tu URL uložené
* Server odešle prohlížeči hlavičky, mezi nimi i cookie, + text odpovědi (HTML, XML, obrázek, ...)
* Prohlížeč posílá na server další požadavek a teď teprve může odeslat cookie, kterou dostal v reakci na předchozí požadavek.

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: