Forum » Programiranje » [php] problem s sejo
[php] problem s sejo
romegregor ::
Zdravo, imam en majčken problemček...namreč, ko se uporabnik spletne strani vpiše z veljavnimi podatki v aplikacijo, je iz strani vpis.php preusmerjen na stran profil.php...vse lepo in prav, prenos informacij seje je pravilen in stran profil.php se pravilno izpiše.
Težava pa se pojavi, ko želim ta isto stran (profil.php), še enkrat prikazati - tokrat z nekaj dodatnimi informacijami, pač odvisno od tega kaj je uporabnik izbral v html formi (kalistenika.inc). Takrat me namesto v profil.php (z dodanimi informacijami) preusmeri na vpis.php - kar nikakor ni logično - vsaj meni :(
"profil.php"
In še "kalistenika.inc" (izriše html formo):
Nikakor mi ni logično kje sem ga pocitral...
Vsakršna pomoč bi zelo prav prišla...
Težava pa se pojavi, ko želim ta isto stran (profil.php), še enkrat prikazati - tokrat z nekaj dodatnimi informacijami, pač odvisno od tega kaj je uporabnik izbral v html formi (kalistenika.inc). Takrat me namesto v profil.php (z dodanimi informacijami) preusmeri na vpis.php - kar nikakor ni logično - vsaj meni :(
"profil.php"
<?php mb_internal_encoding("UTF-8"); mb_http_output( "UTF-8" ); ob_start("mb_output_handler"); //---preveri ali je uporabnik logiran---// if (!isset($_SESSION['uporabnik'])) { include("index.php"); exit(); } //---pozdrav---// echo ("Dobrodošli $up_ime"); ?> <?php //---uporabnik izbere---// if(@$_POST['kknof']) { $_SESSION['uporabnik'] = $up_ime; include("profil.php"); echo "krneki"; } else include ("includes/kalistenika.inc"); ?>
In še "kalistenika.inc" (izriše html formo):
<?php //---izriše html obrazec---// ?><form action="<?php echo $_SERVER['PHP_SELF']?>" method="post"> <input type="radio" name="$intenzivnost" value="lahko">Lahko<br> <input type="radio" name="$intenzivnost" value="normalno" checked>Normalno<br> <input type="radio" name="$intenzivnost" value="tezko">Težko<br> <input type="submit" name="kknof" value="IZDELAJ" /> </form>
Nikakor mi ni logično kje sem ga pocitral...
Vsakršna pomoč bi zelo prav prišla...
AndrejS ::
Nisem neki PHP programer ampak tole se mi zdi zelo čudno :
v profil.php imaš include("profil.php");
v profil.php imaš include("profil.php");
Mesar ::
Sešni ti ne delajo ker ti manjka session_start() - http://php.net/manual/en/function.sessi...
Your turn to burn!
romegregor ::
1) Sj to je tisto - ni preusmeritve na vpis.php in mi kar preusmeri na vpis.php!!! Po logiki bi moralo preusmeriti na index.php, v kolikor v $_SESSION spremenljivki ne najde zapisa
2) v profil.php imam include("profil.php") zato, ker želim še enkrat prikazati isto stran, vendar tokrat z dodatnimi informacijami na njej...je to sploh možno ali sem kaj zabluzil?
3) session_start() imam takoj na začetku...takoj za php tagom...ko sem tu gori kopiral source, sem ga pozabil označit
Je torej še kšna ideja? Sem mogoče kje napravil logično napako?
2) v profil.php imam include("profil.php") zato, ker želim še enkrat prikazati isto stran, vendar tokrat z dodatnimi informacijami na njej...je to sploh možno ali sem kaj zabluzil?
3) session_start() imam takoj na začetku...takoj za php tagom...ko sem tu gori kopiral source, sem ga pozabil označit
Je torej še kšna ideja? Sem mogoče kje napravil logično napako?
Mesar ::
Preusmeritve? Po novem jih nekateri brskalniki cacherajo, v kolikor niso temporary redirects (302) - pobriši cache, če si header("location: ..."); uporabljal. Drugače pa pred if stavkom, ki se čudno izvaja oz. drugače kot misliš, da bi se moral napiši print_r($GLOBALS); die(0); pa preveri kakšne so vrednosti spremenljivk, ki jih tam uporabljaš.
Your turn to burn!
romegregor ::
Bom poskusil še to...da vidim kaj sploh je v spremenljivki...kakorkoli - želel sem napraviti program, ki bi še enkrat izpisal isto stran, tokrat z več informacijami (katere bi bile odvisne od izbire, ki bi jo uporabnik napravil ob stisku gumba kalistenika.inc).
romegregor ::
Torej...zadeva je takšna: ker ne uporabjam header-ja z brisanjem cache-a nisem poskušal. print_r pa mi pokaže vrednost spremenljivke kot je potrebna, torej uporabniško ime shranjeno v array $_SESSION['uporabnik'].
Počasi mi zmanjkuje idej...tako da dvomim, da sploh lahko izrišem ponovno stran z dodatnimi informacijami
Počasi mi zmanjkuje idej...tako da dvomim, da sploh lahko izrišem ponovno stran z dodatnimi informacijami
Mesar ::
In potem če je pogoj izpolnjen rekurzivno includaš?
Pa kaj je to: if(@$_POST['kknof'])
A postaš 0 in 1? Pa namesto @ uporabljaj raje isset() in potem primerjaj vrednost...
Pa kaj je to: if(@$_POST['kknof'])
A postaš 0 in 1? Pa namesto @ uporabljaj raje isset() in potem primerjaj vrednost...
Your turn to burn!
romegregor ::
To z rekurzijo je bilo v načrtu, pa sem ugotovil, da bi za izpis dodatnih podatkov potreboval osvežit stran, kar je pa isto, kot če podatke pošljem drugi strani...
Tisto (@) sem uporabil da sem preveril ali je uporabnik stisnil gumb kknof.
Postal sem pa string vrednosti...lahko, srednjo, tezko (če me to sprašuješ)
Kakorkoli, sedaj sem zadevo izpeljal malce drugače (ne uporabljam rekurzije, temveč izpišem novo stran s podatki), ampak dvomim da bo šlo brez predporodnih krčev...
Še nekaj me zanima...če nastavim vrednosti v $_SESSION, naj bi bile spremenljivke na voljo v vseh straneh, ali jih moram kljub vsemu pošiljat po straneh?
Tisto (@) sem uporabil da sem preveril ali je uporabnik stisnil gumb kknof.
Postal sem pa string vrednosti...lahko, srednjo, tezko (če me to sprašuješ)
Kakorkoli, sedaj sem zadevo izpeljal malce drugače (ne uporabljam rekurzije, temveč izpišem novo stran s podatki), ampak dvomim da bo šlo brez predporodnih krčev...
Še nekaj me zanima...če nastavim vrednosti v $_SESSION, naj bi bile spremenljivke na voljo v vseh straneh, ali jih moram kljub vsemu pošiljat po straneh?
Mesar ::
$_SESSION se sam "nastavi" na vseh straneh kjer bos pognal session_start() seveda glede na ustrezen ID seje, ki more biti v piškotku ali URLju.
Your turn to burn!
romegregor ::
To torej pomeni da:
1. začnem s sejo,
2. v spremenljivko $_SESSION shranim kar pač želim shraniti,
3. session_id() pošljem po URL-ju na drugo stran,
4. na drugi strani je potem na voljo $_SESSION spremenljivka in lahko z njo počnem kar pač želim?
Ko pošljem session_id na drugo stran, stran samodejno prevzame stevilko seje?
Kaj pa če pošljem session_id() v $_POST?
Ni to bolj varno...vendar, kako potem druga spletna stran prevzame session_id()?
1. začnem s sejo,
2. v spremenljivko $_SESSION shranim kar pač želim shraniti,
3. session_id() pošljem po URL-ju na drugo stran,
4. na drugi strani je potem na voljo $_SESSION spremenljivka in lahko z njo počnem kar pač želim?
Ko pošljem session_id na drugo stran, stran samodejno prevzame stevilko seje?
Kaj pa če pošljem session_id() v $_POST?
Ni to bolj varno...vendar, kako potem druga spletna stran prevzame session_id()?
Zgodovina sprememb…
- spremenilo: romegregor ()
Mesar ::
1. povsod kjer hočeš delat s sejami začneš session_start()
2. da
3. ni potrebe, načeloma ti session ID PHP sam shrani v piškot (vsej večina privzetih konfiguracij PHPja je takšnih)
4. na drugi strani kjer je dostopen session ID, če uporabljaš piškotke je pomembno tudi kako imaš nastavljene domene/poddomene, na podstraneh pa ti mora po defaultu delat
>> Ko pošljem session_id na drugo stran, stran samodejno prevzame stevilko seje?
Ja, razen če imaš kakšno čudno konfiguracijo v php.ini, če se na strani izvede session_start() ti preveri če seja obstaja in nastavi vrednosti za tisto sejo, če seja ne obstaja pa tudi session_start() naredi novo sejo v katero moraš potem nafilat podatke.
>> Kaj pa če pošljem session_id() v $_POST?
Zakaj? Potem moraš uporabljat POST na prav vsaki strani kjer hočeš uporabljati seje, kar je malce nepraktično.
>> Ni to bolj varno...vendar, kako potem druga spletna stran prevzame session_id()?
Druga stran (na drugi domeni) ne more prevzet seje, sejo lahko prevzame samo podstran na isti domeni, oziroma v konfiguracijo lahko dodaš še poddomene in z kakšnimi mučkami domene na istem serverju, tukaj pa se konča (ker so podatki v seji shranjeni na serverju, uporabnik ima samo ID seje).
Če hočeš varnost določi vsaki seji IP naslov, brskalnik (kr hash) in datum recimo pa to preverjaj in lahko s tem precej omejiš session hijacking.
Sicer pa ... http://php.net/manual/en/book.session.p... preberi malo.
2. da
3. ni potrebe, načeloma ti session ID PHP sam shrani v piškot (vsej večina privzetih konfiguracij PHPja je takšnih)
4. na drugi strani kjer je dostopen session ID, če uporabljaš piškotke je pomembno tudi kako imaš nastavljene domene/poddomene, na podstraneh pa ti mora po defaultu delat
>> Ko pošljem session_id na drugo stran, stran samodejno prevzame stevilko seje?
Ja, razen če imaš kakšno čudno konfiguracijo v php.ini, če se na strani izvede session_start() ti preveri če seja obstaja in nastavi vrednosti za tisto sejo, če seja ne obstaja pa tudi session_start() naredi novo sejo v katero moraš potem nafilat podatke.
>> Kaj pa če pošljem session_id() v $_POST?
Zakaj? Potem moraš uporabljat POST na prav vsaki strani kjer hočeš uporabljati seje, kar je malce nepraktično.
>> Ni to bolj varno...vendar, kako potem druga spletna stran prevzame session_id()?
Druga stran (na drugi domeni) ne more prevzet seje, sejo lahko prevzame samo podstran na isti domeni, oziroma v konfiguracijo lahko dodaš še poddomene in z kakšnimi mučkami domene na istem serverju, tukaj pa se konča (ker so podatki v seji shranjeni na serverju, uporabnik ima samo ID seje).
Če hočeš varnost določi vsaki seji IP naslov, brskalnik (kr hash) in datum recimo pa to preverjaj in lahko s tem precej omejiš session hijacking.
Sicer pa ... http://php.net/manual/en/book.session.p... preberi malo.
Your turn to burn!
romegregor ::
Končnoooo...zdj mi štima Hvala Vam VSEM.
P.S.: sem potreboval razlago na osnovi primera :D , tole sploh ni tko težko kakor je izgledalo na začetku :D
P.S.: sem potreboval razlago na osnovi primera :D , tole sploh ni tko težko kakor je izgledalo na začetku :D
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | HTML actionsOddelek: Programiranje | 1079 (775) | Baja |
» | Kako zaščititi /uploads direktorij?Oddelek: Izdelava spletišč | 2147 (1910) | MrBrdo |
» | Napaka v Internet Explorer-juOddelek: Izdelava spletišč | 1999 (1801) | Gost |
» | Html forms & php -> prikaz statusaOddelek: Izdelava spletišč | 1723 (1637) | mercury |
» | HTML forma in datumOddelek: Izdelava spletišč | 1815 (1551) | Muzo |