Obsah fóra
PravidláRegistrovaťPrihlásenie




Odpovedať na tému [ Príspevkov: 16 ] 
AutorSpráva
Offline

Užívateľ
Užívateľ
Header(location:Problem)

Registrovaný: 05.09.09
Príspevky: 1141
Témy: 127
Bydlisko: Lehota pod ...
Príspevok NapísalOffline : 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!


Offline

Správca fóra
Správca fóra
Header(location:Problem)

Registrovaný: 27.07.07
Príspevky: 3948
Témy: 51
Bydlisko: Bratislava
Príspevok NapísalOffline : 17.08.2011 17:09

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
Offline

Užívateľ
Užívateľ
Header(location:Problem)

Registrovaný: 05.09.09
Príspevky: 1141
Témy: 127
Bydlisko: Lehota pod ...
Príspevok Napísal autor témyOffline : 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

Offline

Užívateľ
Užívateľ
Header(location:Problem)

Registrovaný: 01.12.09
Prihlásený: 20.04.19
Príspevky: 862
Témy: 26
Bydlisko: Žilina
Príspevok NapísalOffline : 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 =(
Offline

Užívateľ
Užívateľ
Header(location:Problem)

Registrovaný: 05.09.09
Príspevky: 1141
Témy: 127
Bydlisko: Lehota pod ...
Príspevok Napísal autor témyOffline : 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.


Offline

Správca fóra
Správca fóra
Header(location:Problem)

Registrovaný: 27.07.07
Príspevky: 3948
Témy: 51
Bydlisko: Bratislava
Príspevok NapísalOffline : 17.08.2011 20:37

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
Offline

Užívateľ
Užívateľ
Header(location:Problem)

Registrovaný: 01.12.09
Prihlásený: 20.04.19
Príspevky: 862
Témy: 26
Bydlisko: Žilina
Príspevok NapísalOffline : 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íspevku

V 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 =(
Offline

Užívateľ
Užívateľ
Header(location:Problem)

Registrovaný: 05.09.09
Príspevky: 1141
Témy: 127
Bydlisko: Lehota pod ...
Príspevok Napísal autor témyOffline : 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... :oops:
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íspevku

No 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íspevku

Tak 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?


Offline

Užívateľ
Užívateľ
Header(location:Problem)

Registrovaný: 26.12.06
Prihlásený: 16.11.19
Príspevky: 3971
Témy: 181
Bydlisko: Nitra / Bra...
Príspevok NapísalOffline : 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
Offline

Užívateľ
Užívateľ
Header(location:Problem)

Registrovaný: 05.09.09
Príspevky: 1141
Témy: 127
Bydlisko: Lehota pod ...
Príspevok Napísal autor témyOffline : 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. :loony: Ja už som v koncoch idem spať!

EDIT:
Nech robím s tou adresou čo chcem takú chybu mi to už nevyhadzuje :loony:
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...


Offline

Užívateľ
Užívateľ
Header(location:Problem)

Registrovaný: 26.12.06
Prihlásený: 16.11.19
Príspevky: 3971
Témy: 181
Bydlisko: Nitra / Bra...
Príspevok NapísalOffline : 18.08.2011 9:30

a nemas tam nejaku slucku presmerovani?







_________________
Sorry za prelkepy
Offline

Užívateľ
Užívateľ
Header(location:Problem)

Registrovaný: 05.09.09
Príspevky: 1141
Témy: 127
Bydlisko: Lehota pod ...
Príspevok Napísal autor témyOffline : 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.


Offline

Správca fóra
Správca fóra
Header(location:Problem)

Registrovaný: 27.07.07
Príspevky: 3948
Témy: 51
Bydlisko: Bratislava
Príspevok NapísalOffline : 18.08.2011 10:35

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
Offline

Užívateľ
Užívateľ
Header(location:Problem)

Registrovaný: 26.12.06
Prihlásený: 16.11.19
Príspevky: 3971
Témy: 181
Bydlisko: Nitra / Bra...
Príspevok NapísalOffline : 18.08.2011 11:03

stenley, v HTTP 1.1 musi mat parameter absolutnu cestu, nie realtivnu.







_________________
Sorry za prelkepy
Offline

Správca fóra
Správca fóra
Header(location:Problem)

Registrovaný: 27.07.07
Príspevky: 3948
Témy: 51
Bydlisko: Bratislava
Príspevok NapísalOffline : 18.08.2011 12:04

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
Offline

Užívateľ
Užívateľ
Header(location:Problem)

Registrovaný: 05.09.09
Príspevky: 1141
Témy: 127
Bydlisko: Lehota pod ...
Príspevok Napísal autor témyOffline : 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 :oops:

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...


Odpovedať na tému [ 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

Skočiť na:  

Powered by phpBB Jarvis © 2005 - 2024 PCforum, webhosting by WebSupport, secured by GeoTrust, edited by JanoF
Ako väčšina webových stránok aj my používame cookies. Zotrvaním na webovej stránke súhlasíte, že ich môžeme používať.
Všeobecné podmienky, spracovanie osobných údajov a pravidlá fóra