mam tento kod: (jenom jsem si chtel ujasnit co dokazou sessions :])
<?
session_start();
if(IsSet($lognise)): //log
$jmeno="PIF";
$_SESSION["username"] = $jmeno;
endif;
if(IsSet($odlognise)): //logout
session_unset($_SESSION["username"]);
if(!$_SESSION["username"])
echo "ODHLASENI USPESNE";
endif;
if($_SESSION["username"]): //je log
echo 'Jste v systemu pane';
echo $username;
else: //neni log
echo "nejste v systemu :]";
endif;
?>
mno a zajimavost je ta, ze kdyz date treba do url ?lognise=1 tak vam to hnedka nenapise $username, ale vypise vam to hned po reloadu... jak to ?
a jeste by me zajimalo, jaka je bezpecnost takovehoto reseni pri autorizaci
diky vsem za odpovedi
v akci je to na http://pif.wz.cz/sessions.php
tak 2 poznamky:
1) session_unset neni funkce na ruseni session promenny, k tomu slouzi session_unregister. (session_unset je bez parametru a rusi vsechny session_promenny). v tvem pripade bych ale pouzil spis session_destroy, ktere zrusi celou session..
2)registrovani session promennych jako globalnich probiha vzdy pri session_start, takze kdyz do $_SESSION pridas promennou tak se namapuje jako globalni az po reloadu.
napsal bych to asi takle:
------------------------------
session_start();
session_register('username');
if(IsSet($lognise)): //log
$jmeno="PIF";
$username = $jmeno;
endif;
if(IsSet($odlognise)): //logout
session_unregister("username");
if(!$username)
echo "ODHLASENI USPESNE";
endif;
if($username): //je log
echo 'Jste v systemu pane';
echo $username;
else: //neni log
echo "nejste v systemu :]";
endif;
tady zase nastava problem s logoutem.... protoze hned po logoutu se totiz jeste porad vypisuje ze jsi v systemu, a teprve az po reloadu ses defacto odhlasenej
prekvapuje me, ze to nereaguje na podstrceni promeny username=aaaaaa napr :]
zajimavy dik
no tak bud za session_unregister dej jeste unset($username) nebo to kontroluj podle $_SESSION[..]
SESSION ma v mapovani globalnich promennych vetsi prioritu nez GET/POST/COOKIE, coz je zaroven docela efektni bezpecnostni opatreni..
nesmis ale zapomenout tu promennou ve vsech skriptech registrovat (hlavne v tech kde uz predpokladas ze v session je)
>>tohle je dost casta a dost blba chyba pri autorizaci
--
session_start();
if($username...)
--
kdyz je username v session tak nic podstrcit nejde, nicmene kdyz na tu stranku jdes primo tak bez problemu.. na tohle je mozna lepsi pouzit $_SESSION..
kk chapu :] dik, proto se vyplati pro jistotu dat do kazdyho dokumentu session_start(), protoze includuju je do index.php, a tudiz kdyz nekdo zavola samotnej soubor klido by to napadl, ale to je jasny
dik
Tag k tem samotnejm souborum zakaz pristup pres HTTP (.htaccess) a si f pohode, nemusis se bat....
ne o to mi neslo....
jenom aby si nikdo nemohl brouzdat myma strankama bez pouziti index.php, dejme tomu ze bych mel treba soubor nejaky_news.php kde by se provadela editace, tudiz by byl pristupny pro kazdyho :] a s tim uz nebude... do kazdyho souboru dam treba nejakou funkci authorize() a ta uz si s tim poradi :P
Mno jasne, ale gdyz includujes, nepotrebujes k souboru pristup pres HTTP, to znamena, ze mas adresar include, ve kterym mas soubory, ktery vyhradne includjes a nemas k nim pristup pres HTTP -> ze k nim nemuze nigdo, muzou bejt jenom includovany...