| | |
| Stránka: 1 z 1
| [ Príspevkov: 16 ] | |
Autor | Správa |
---|
Registrovaný: 05.09.09 Príspevky: 1141 Témy: 127 Bydlisko: Lehota pod ... | Napísal camo: 17.08.2011 17:00 | |
|
Zdravím vás!
Robil som jedno prihlasovanie a chcel som to urobiť cez presmerovanie nie cez include. Robil som to cca. Takýmto štýlom:
Kód: <?php session_start(); include "DBconnRefLog.php"; if(isset($_SESSION['login'])){ header('Location: AdminLogin.php'); } ...
Ale narazil som na problém:
Citácia: Stránku sa nepodarilo správne presmerovať Firefox zistil, že server smeruje požiadavku tejto stránky spôsobom, ktorým sa presmerovanie nikdy neukončí. Tento problém môže nastať pri nepovolení, resp. odmietnutí cookies.
Vamanuáli som sa dočítal, že to súvisí s tým že header location neodosiela SID a že treba nastaviť session.use_trans_sid. Neviem či som to dobre pochopil, ale to znamená, že bude SID súčasťou adresy? Vlastne ma zaujíma, či je toto vôbec dobrý nápad a či sa nemám vrátiť k includovaniu.
Vďaka!
|
|
Registrovaný: 27.07.07 Príspevky: 3948 Témy: 51 Bydlisko: Bratislava |
nie je to nahodou tym, ze tam mas "nekonecny cyklus"? nemas niekde v AdminLogin.php spatne presmerovanie?
_________________ NTB: Acer Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB | RAM: 8GB DDR3 1066 MHz | HDD: 1TB SSD WD BLUE |
|
Registrovaný: 05.09.09 Príspevky: 1141 Témy: 127 Bydlisko: Lehota pod ... | Napísal autor témy camo: 17.08.2011 20:00 | |
|
AdminLogin vyzerá takto.
Asi by to malo byť v tom poslednom else. Ale ako, Podľa mojej logiky sa má vykonať iba ak nie je SESSION['login'] nastavene. A to by nemalo pri tom 1. presmerovani byt:
Kód: <?php session_start(); include('DBconnRefLog.php'); if(isset($_POST['meno'])){ $meno=addslashes($_POST['meno']); //pozor na addslashes... $heslosha1=sha1($_POST['heslo']); //netreba add slashes, sha vracia hexadec. cislo $query="select id, meno, heslo from login where meno='$meno' and heslo='$heslosha1'"; $result=mysql_query($query) or die('<h2 style="width:500px; margin:130px auto">Spojenie s databazou zlyhalo!<br><a href="AdmiLogin.php">Skusit znova</a>'); while($row=mysql_fetch_assoc($result)){ $_SESSION['login']='ok'; $_SESSION['userId']=$row['id']; $_SESSION['user']=$row['meno']; } } if(!isset($_SESSION['login'])){
?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <meta name="generator" content="PSPad editor, www.pspad.com"> <title></title> <style type="text/css"> html, body, div, form, p, img, menu, ul, ol, li, a, h1, h2, h3{margin:0px; padding:0px} #obal{margin:0px auto; width:950px} body, form, table, h1,h2,h3,h4{font-family:tahoma} h2{margin-top:150px; padding:3px 15px; background-color:#aaaabb} #formik{padding:15px; background-color:#eeeeff} #registracia{text-decoration:none} #registracia:hover{text-decoration:underline; background-color:#0062ff}
</style> <script type="text/javascript">
</script> </head> <body> <div id="obal" style=""> <h2>Zadajte vaše meno a heslo ku stránke xxx.net, alebo sa <a id="registracia" href="Registracia.php">zaregistrujte</a></h2> <form id="formik" action="AdminLogin.php" method="post"> <br> meno:<input name="meno" type="text" size="15"> heslo: <input name="heslo" type="password" size="15"><br><br> <input type="submit" value="submit"> </form> </div> </body> </html> <?php } else header('location:Admin.php'); ?>
Naposledy upravil camo dňa 17.08.2011 20:32, celkovo upravené 1
|
|
Registrovaný: 01.12.09 Prihlásený: 20.04.19 Príspevky: 862 Témy: 26 Bydlisko: Žilina | Napísal Bajzik: 17.08.2011 20:32 | |
|
V Admin v prípade že je session nastavený redirect na AdminLogin, v admin logine ak je session nastavený tak redirect na Admin.php
čiže ak je session nastavený tak
Admin => AdminLogin => Admin => AdminLogin =>Admin ... atď. Ak som si správne dosadil názvy, ak nie, tak neviem
_________________ PC :ASUSTeK M2A-VM, AMD Phenom X3 8650 AM2 @ 2,3 Ghz, 4 GB RAM DDR2 1800 MHz, SAPPHIRE HD 6770 VAPOR-X 1GB DDR5, 400W Zdroj, 500 GB HDD, Windows Vista 64 bit
Notebook : Asus EEEPC 1201NL, intel Atom N270 512 KB L2 Cache 533 MHz FSB @ 1,6 Ghz, 1 GB DDR2 RAM, nVidia ION, 320 GB HDD, Windows XP 32 bit
Iná technika : LG P500 (806 Mhz, Android 2.3.3 Gingerbread, root, JIT), Koss Pathfinder, kedysi iPhone =( |
|
Registrovaný: 05.09.09 Príspevky: 1141 Témy: 127 Bydlisko: Lehota pod ... | Napísal autor témy camo: 17.08.2011 20:37 | |
|
No ano, ale pri prvom redirekte(ten čo tu riešime), je SESSION(´login´) false. else vetva sa nevykoná. Mal sa vykresliť formulár, žiaden nekonečný cyklus.
|
|
Registrovaný: 27.07.07 Príspevky: 3948 Témy: 51 Bydlisko: Bratislava |
z tvojho kodu vyplyva, ze $_SESSION['login'] nastavujes, ak su zadane spravne prihlasovacie udaje... preco potom v kode, ktory si uviedol v prvom prispevku, presmerovavas na prihlasovaci formular, ak tato premenna existuje? Nemalo by tam byt skor !isset()?
_________________ NTB: Acer Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB | RAM: 8GB DDR3 1066 MHz | HDD: 1TB SSD WD BLUE |
|
Registrovaný: 01.12.09 Prihlásený: 20.04.19 Príspevky: 862 Témy: 26 Bydlisko: Žilina | Napísal Bajzik: 17.08.2011 20:40 | |
|
Kód: if(isset($_SESSION['login'])){ header('Location: AdminLogin.php'); } Takže ak JE session 'login' nastavený, prehliadač presmeruje na AdminLogin.php. A tam Kód: if(!isset($_SESSION['login'])){
Ak NIE JE session 'login' nastavený, čo náš prípad nie je, keďže ho máme nastavený, tak sa vypíše spomínaný obsah, inak (else, čo je náš prípad) prehliadač presmeruje na admin.php.
Podľa mňa jasný cyklus // pridané po 1 minúte od posledného príspevkuV podstate máš dve presmerovania vždy pri inej hodnote premennej, takže sa musia cykliť lebo
ak áno, => adminlogin , a v ňom ak áno => admin.php
_________________ PC :ASUSTeK M2A-VM, AMD Phenom X3 8650 AM2 @ 2,3 Ghz, 4 GB RAM DDR2 1800 MHz, SAPPHIRE HD 6770 VAPOR-X 1GB DDR5, 400W Zdroj, 500 GB HDD, Windows Vista 64 bit
Notebook : Asus EEEPC 1201NL, intel Atom N270 512 KB L2 Cache 533 MHz FSB @ 1,6 Ghz, 1 GB DDR2 RAM, nVidia ION, 320 GB HDD, Windows XP 32 bit
Iná technika : LG P500 (806 Mhz, Android 2.3.3 Gingerbread, root, JIT), Koss Pathfinder, kedysi iPhone =( |
|
Registrovaný: 05.09.09 Príspevky: 1141 Témy: 127 Bydlisko: Lehota pod ... | Napísal autor témy camo: 17.08.2011 22:34 | |
|
Áno máte pravdu, pôvodne tam samozrejme bol ten !.
Takže v Admin.php je:
Kód: if(!isset($_SESSION['login'])){ header('Location: AdminLogin.php'); } Tak ako ste si to predstavovali... Ten problem vlastne nastal včera v noci, keď som to dokončil a začal som to "vylepšovať". Dal som do header:location absolútnu cestu(ako mi radili v manuáli... ). Dovtedy to presmerovanie fungovalo. To ale FF nezvládol a začal mi duplikovať v adrese tú abolútnu časť. Tak som začal blbnúť aj ja a vymazal som ten !. Na to som si už dnes nespomenul... Takže problém je vlastne v tom, že FF nechce v Admin.php brať absolútnu cestu pri tom presmerovaní. Ja som ju tam zadal natvrdo Kód: header('Location: http://localhost/XXX/AdminLogin.php'); A v tom je vlastne problém(aj keď po tom čo som čítal o tom header+SID sa mi to prestáva páčiť...). EDIT: Takže otázka vlastne znie - Prečo FF nebere absolutnu cestu. Z http://localhost/XXX/AdminLogin.php urobí http://localhost/XXX/localhost/XXX/AdminLogin.php EDIT2: pridané po 38 minútach od posledného príspevkuNo ak to dobre chápem, tak je spôsobené verziou HTTP protokolu. HTTP 1.1 vyžaduje absolútnu cestu. Tak som ju tam dal, lebo som si myslel, že to predsa nemôže nič pokaziť. Nechápem, či mám pred tým tetovať verziu protokolu, aby som to mohol odoslať. To mi príde ako komplikované. Čakal by som, že to bude s abs. cestou fungovať. Neviem mi to niekto vysvetliť?? EDIT3:// pridané po 58 minútach od posledného príspevkuTak som tam pridal ten kód čo je v manuáli a začalo to fungovať: Kód: if(!isset($_SESSION['login'])){ $host = $_SERVER['HTTP_HOST']; $uri = rtrim(dirname($_SERVER['PHP_SELF']), '/\\'); $extra = 'Adminlogin.php'; header("Location: http://$host$uri/$extra"); }
Ale nechápem, v čom sa to líši od tej cesty, čo som tam mal pred tým. Veď tie SERVER premenné obsahujú to isté, nie?
|
|
Registrovaný: 26.12.06 Prihlásený: 16.11.19 Príspevky: 3971 Témy: 181 Bydlisko: Nitra / Bra... | Napísal emer: 17.08.2011 22:49 | |
|
predpokladam, ze to XXX v adrese si prepisal a vskutocnosti je to nieco ine, takze tam moze byt zrada. no v HTTP musi byt absolutna cesta, to je jasne.
_________________ Sorry za prelkepy |
|
Registrovaný: 05.09.09 Príspevky: 1141 Témy: 127 Bydlisko: Lehota pod ... | Napísal autor témy camo: 17.08.2011 23:19 | |
|
emer:
Som z toho ...
Naozaj to tak vyzerá, ale keď som sa pozeral do histórie prehliadača tak tá not found položka mala adresu správnu. Tiež keď som zámerne skomolil adresu, tak to síce nič nenašlo, ale tú adresu tak nezduplikovalo ako som to uviedol.
Teraz je to tam natrvdo a fuguje to. Ja už som v koncoch idem spať!
EDIT:
Nech robím s tou adresou čo chcem takú chybu mi to už nevyhadzuje
Možno je to aj tým, že som dnes večer inštaloval nový FF tj. že keď som sem písal tak som mal ešte starú verziu... Dalo by sa nejako dostať naspäť k staršej, aby som si to skúsil vyvolať tak ako pred tým??? Ma to vytáča...
|
|
Registrovaný: 26.12.06 Prihlásený: 16.11.19 Príspevky: 3971 Témy: 181 Bydlisko: Nitra / Bra... | Napísal emer: 18.08.2011 9:30 | |
|
a nemas tam nejaku slucku presmerovani?
_________________ Sorry za prelkepy |
|
Registrovaný: 05.09.09 Príspevky: 1141 Témy: 127 Bydlisko: Lehota pod ... | Napísal autor témy camo: 18.08.2011 10:19 | |
|
emer:
Slučka tam bola, to už odhalil stenley, ale to nebol hlavný problém. Problém bol v tej adrese a vôbec neviem prečo... Teraz to všetko funguje. Už mám len dilemu, či to celé prepísať na includovanie alebo to nechať tak. To session id mi stále vŕta v hlave a tiež že každé presmerovanie je vlastne HTTP požiadavka navyšše. Ale v porovnaní s include je sa mi to vidí oveľa prehľadnejšie.
|
|
Registrovaný: 27.07.07 Príspevky: 3948 Témy: 51 Bydlisko: Bratislava |
hmm, za tie roky vyvoja na localhoste som podobny problem nikdy nezaznamenal - skusal si pouzit aj tvary ./AdminLogin.php alebo /XXX/AdminLogin.php (bez http)?
_________________ NTB: Acer Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB | RAM: 8GB DDR3 1066 MHz | HDD: 1TB SSD WD BLUE |
|
Registrovaný: 26.12.06 Prihlásený: 16.11.19 Príspevky: 3971 Témy: 181 Bydlisko: Nitra / Bra... | Napísal emer: 18.08.2011 11:03 | |
|
stenley, v HTTP 1.1 musi mat parameter absolutnu cestu, nie realtivnu.
_________________ Sorry za prelkepy |
|
Registrovaný: 27.07.07 Príspevky: 3948 Témy: 51 Bydlisko: Bratislava |
nj, to som v jeho prispevku prehliadol...
_________________ NTB: Acer Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB | RAM: 8GB DDR3 1066 MHz | HDD: 1TB SSD WD BLUE |
|
Registrovaný: 05.09.09 Príspevky: 1141 Témy: 127 Bydlisko: Lehota pod ... | Napísal autor témy camo: 18.08.2011 15:05 | |
|
Mám to! Takú chybu vyhodí tvar location:localhost/XXX/Admin.php - bez http://
Nechápem, ako som to mohol opomenúť... Prepáčte, že som vás toľko naťahoval
Steley:
Ty nevieš niečo bližšie o tom odovzdávaní session cez header? Vidím, že to funguje, takže to SID sa nepredáva, zrejme len ak browser odmietne cookies. To už dnes hádam ani neni reálne...
|
|
| Stránka: 1 z 1
| [ Príspevkov: 16 ] | |
| Nemôžete zakladať nové témy v tomto fóre Nemôžete odpovedať na témy v tomto fóre Nemôžete upravovať svoje príspevky v tomto fóre Nemôžete mazať svoje príspevky v tomto fóre
|
|