Autor | Zpráva | ||
---|---|---|---|
soucekgns Profil |
#1 · Zasláno: 7. 4. 2011, 23:08:44
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 |
#2 · Zasláno: 7. 4. 2011, 23:21:12
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 |
#3 · Zasláno: 7. 4. 2011, 23:24:56
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 |
#4 · Zasláno: 7. 4. 2011, 23:28:39 · Upravil/a: Tori
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 |
#5 · Zasláno: 7. 4. 2011, 23:38:06
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 |
#6 · Zasláno: 7. 4. 2011, 23:39:07 · Upravil/a: soucekgns
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 |
#7 · Zasláno: 7. 4. 2011, 23:45:51
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 |
#8 · Zasláno: 7. 4. 2011, 23:50:21
Hm... to jsem přehlédl, a jde to udělat tedy jinak?
|
||
tatyalien Profil |
#9 · Zasláno: 8. 4. 2011, 07:37:35
To co psal Tori, session_start() v indexu, úplně jako první věc.
|
||
Joker Profil |
#10 · Zasláno: 8. 4. 2011, 07:58:20 · Upravil/a: Joker
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 |
#11 · Zasláno: 8. 4. 2011, 15:56:30
|
||
Joker Profil |
#12 · Zasláno: 8. 4. 2011, 16:10:07
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 |
#13 · Zasláno: 8. 4. 2011, 16:11:03 · Upravil/a: Tori
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 |
#14 · Zasláno: 8. 4. 2011, 16:32:20
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 |
#15 · Zasláno: 8. 4. 2011, 16:35:37
sorry funguje to normálně ale s $_POST['username']!=''
|
||
Tori Profil |
#16 · Zasláno: 8. 4. 2011, 16:45:55 · Upravil/a: Tori
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. |
||
Časová prodleva: 13 let
|
0