Autor | Zpráva | ||
---|---|---|---|
Lukyn5 Profil * |
Ahoj, řeším již několik dní problém, který bude malinkatý, ale já ne a ne ho najít. Jedná se o problém se SESSION.
Pomocí toho HTML odesílám POST do souboru "prihlaseni": <form id='form1' name='form1' method='post' action='prihlaseni'> Přihlášení:<br> <input type='password' name='heslo' id='textfield2' class='input1' /> <input type='image' name='imagefield1' id='imagefield1' src='images/subpage1_06.gif' /> <a href='registrace'>Registrace</a> </form> V souboru "prihlaseni" se nachází tento script, který má vytvořit SESSION: <?php if(!session_id()) session_start(); header("Cache-control: private"); if(isset($_POST['heslo'])) { $db=mysql_connect('localhost','*****','*****') or die(mysql_error()); mysql_select_db('*****'); $_POST['heslo']= mysql_real_escape_string(strip_tags(trim($_POST['heslo']))); $q= mysql_query("SELECT * FROM plat WHERE heslo='{$_POST['heslo']}'",$db) or die(mysql_error()); if(mysql_num_rows($q) > 0) { $_SESSION['heslo'] = $_POST['heslo']; $login= "<p>Byl(a) jste úspěšně přihlášen(a).</p><meta http-equiv='refresh' content='3;url=index.php'>"; } else { $login= "<p>Zadané heslo je bohužel neplatné. Zkuste je, prosím, zadat a znovu a nezapoměňte dbát na správnou velikost písmen (malá, velká) a nezaměňte nulu za velké písmeno O.</p>"; } mysql_close($db); } echo $login; ?> Tento script se zdá být z části funkční, jelikož existenci hesla v databázi ověřený správě, funguje správně a dokonce :-D, pokud si nechám vypsat pod echo echo $login; ještě echo $_SESSION['heslo'];, vypíše se mi zadané heslo -> správně. To znamená, že celý soubor je funkční. Nyní je problém, že pokud ověřuji existenci SESSION na další stránce (na kterou mě refresh-oval script - viz výšše) tímto kódem: <?php if(!session_id()) session_start(); header("Cache-control: private"); $sesheslo = $_SESSION['heslo']; if ($_SESSION['heslo']){ echo "<form id='form1' name='form1'>Jste přihlášen(a) jako:<br>$sesheslo<br><a href='odhlaseni'>Odhlásit se </a></form>"; } else echo "<form id='form1' name='form1' method='post' action='prihlaseni'> Přihlášení:<br> <input type='password' name='heslo' id='textfield2' class='input1' /> <input type='image' name='imagefield1' id='imagefield1' src='images/subpage1_06.gif' /> <a href='registrace'>Registrace</a> </form>"; ?> Script se tváří, jako by v SESSION nic nebylo - vypíše else echo. Pokud si vložím na tuto stránku např. i zmíněné echo $_SESSION['heslo'];, nic se nevypíše (SESSION je prázdné nebo neexistuje). Když to shrnu, jeví se mi zde problém, že buď mám někde chybu v zápisu SESSION (ale jakou, když ji script "prihlaseni" vytvori), nebo se z nejake duvodu jako by neuloží --> SESSION existuje jen na první stránce a po refreshu na index je již prázdná). Prosím, poraďte, jsem zoufalý. Kdo tento problém vyřeší, čeká na něj překvapení :-D. Předem díky. |
||
wise Profil |
#2 · Zasláno: 22. 7. 2010, 19:50:44
Do hloubky o session moc nevím, ale: pokud v souboru prihlaseni "nastartujes" session už jednou, proč ho poté v dalších souboru (kam přesměrováváš), "startuješ" znovu?
Logicky by se o tomto dalo uvažovat. Další je nasnadě problém s register_globals. |
||
Lukyn5 Profil |
#3 · Zasláno: 22. 7. 2010, 19:59:37
Odstranění "startování" :-D to bohužel nevyřešilo.
|
||
mckay Profil |
#4 · Zasláno: 22. 7. 2010, 20:33:52 · Upravil/a: mckay
Lukyn5:
Jen tak od prvního pohledu doporučuji naučit se psát tělo podmínek mezi složené závorky... lépe se ti v tom bude orientovat a pravděpodobně i nám, všem ostatním. Mimochodem, nikdy jsem nepoužíval na začátku souboru to session_id();, celý i s tou podmínkou to tam odtud vyhoď, možná že to potom bude fachat. wise: „Do hloubky o session moc nevím, ale: pokud v souboru prihlaseni "nastartujes" session už jednou, proč ho poté v dalších souboru (kam přesměrováváš), "startuješ" znovu?“ V každém souboru, kde pracuješ se session by jsi ho měl mít nastartované. |
||
Lukyn5 Profil |
#5 · Zasláno: 22. 7. 2010, 20:40:26
Neboj, vyzkoušeno i bez těch podmínek, jenom s
session_start(); |
||
mckay Profil |
#6 · Zasláno: 22. 7. 2010, 20:43:21
Lukyn5:
Teď už jenom hádám - ale co ta hlavička, zkoušel jsi ji oddělat? |
||
wise Profil |
#7 · Zasláno: 22. 7. 2010, 21:00:53 · Upravil/a: wise
Yep, omlouvám se moje chyba :) Napsal jsem blbost.
Nicméně zkus jít vylučovací metodou: odstranit hlavičku odstranit session_id (nikdy jsem nepoužíval) zkusit změnit typ přesměrování např. na js popř. si vypsat celý session, ikdyž to nejspíš nebude ono. Ale zkusit můžem vše foreach($_SESSION as $k => $v) echo $k . " - " . $v . "\n"; |
||
Lukyn5 Profil |
#8 · Zasláno: 22. 7. 2010, 21:07:08
Co si představujete pod odstraněním hlavičky?
Nyní script vypadá takto: <?php session_start(); if(isset($_POST['heslo'])) { ... při vypsáni session zmíněným kódem je výstup na "prihlaseni": heslo - 1234 Na indexu nic. |
||
tiso Profil |
#9 · Zasláno: 22. 7. 2010, 21:24:43
Lukyn5:
if(false == session_start()){die('Nepodarilo sa vytvoriť session, asi mám niekde výstup (napríklad BOM), kde by nemal byť');} |
||
Lukyn5 Profil |
#10 · Zasláno: 22. 7. 2010, 21:38:50
tiso:
nepomohlo :( |
||
Davex Profil |
#11 · Zasláno: 22. 7. 2010, 21:52:44 · Upravil/a: Davex
Požadavky s posílanými Cookies by se kešovat neměly, ale jak to vypadá ve Firebugu - načte se ta stránka po přesměrování z keše prohlížeče nebo opravdu ze serveru? Vynucené vypnutí kešování (na té stránce, kde sessions chybí) by po vymazání keše v prohlížeči nepomohlo?
header("Cache-control: no-cache, max-age=0"); |
||
Lukyn5 Profil |
#12 · Zasláno: 22. 7. 2010, 22:00:48
Do jakého souboru mám tento kód vložit? "prihlaseni" nebo "overeni"
Jak se maže cash, opravdu nevím - používám FF |
||
Davex Profil |
#13 · Zasláno: 22. 7. 2010, 22:04:50 · Upravil/a: Davex
Lukyn5:
„Do jakého souboru mám tento kód vložit? "prihlaseni" nebo "overeni"“ Preventivně třeba i do obou a zakomentuj header("Cache-control: private");
„Jak se maže cash, opravdu nevím - používám FF“ Nástroje / Vymazat nedávnou historii... - Vyrovnávací paměť |
||
imploder Profil |
#14 · Zasláno: 22. 7. 2010, 22:09:29
Lukyn5:
Mně to v osekané podobě funguje, můžeš si to vyzkoušet u sebe: ses.zip |
||
Lukyn5 Profil |
#15 · Zasláno: 23. 7. 2010, 08:19:53
imploder:
Z toho souboru mě to funguje také. Tak kde je problém? |
||
Lukyn5 Profil |
#16 · Zasláno: 23. 7. 2010, 08:33:37
Tak jsem problém našel sám, teď přijít na to, jak ho "hezky" vyřešit. Pokud upravím přihlašovací formulář aby nesměřoval na "prihlaseni", kde ho .htaccess kvůli mod rewrite převedce na index.php?stranka=prihlaseni a zde ho v indexu zpracuje tento kod
if ($_REQUEST['stranka'] == 'prihlaseni' ) { include ("login.php"); }; a namísto tohoto postupu použiji přímo cestu z formuláře na login.php, tak script funguje a i v indexu se zobrazí informace o přihlášení. Tedy zcela funkční. Problém je, jak tedy script zakomponovat do webu - nyní se prostě zobrazí na bílé stránce. Díky za pomoc. |
||
Lukyn5 Profil |
#17 · Zasláno: 23. 7. 2010, 08:37:56
Tak provizorně jsem to vyřešil směřováním formuláře na index.php?stranka=prihlaseni
Beru to jako vyřešené, moc všem děkuji za pomoc, ale kdyby někdo přišel na nějaké super řešení, rád použiji. |
||
Časová prodleva: 14 let
|
0