Pereiti prie turinio

PHP Tutorialai - Sesijos/Cookies


Rekomenduojami pranešimai

Hillow.

Čia turėtų būti koks nors preface‘as or smth, bet jo beveik nebus, nes nelabai moku juos rašyt :lol:

Taigi, šis tutorialas man yra pirmasis, todėl didelių paslapčių galit nesitikėti (MUHAHAHA) :)

 

 

SESIJOS (SESSIONS)

 

Sesijos naudojamos pakeisti paprastus kintamuosius tarkim login‘ams ir t.t. Sesijų duomenys saugomi severio pusėje.

 

Sesijos sukūrimui naudojame session_start(); ( Jis visada turi būti prieš bet kokį kitą output‘ą, net prieš <head> ir t.t.).

session_start() turi būti kiekviename puslapyje, kuriame naudosi sesijas, netgi Log out'e.

Norėdamas priskirti sesijos kintamajam tam tikrą reikšmę su juo elgiamės kaip su paprastu array‘um.

$_SESSION[‘kintamasis’]=”Kintamojo reikšmė”;

 

Taigi, sesija užsetinta. Jos naudojimas toks pat kaip ir paprasto kintamojo.

echo $_SESSION[‘kintamasis’];

 

Norint sunaikinti sesija naudojama f-ja session_destroy();

 

Taigi. Apie sesijas nėra ka daugiau ir pasakyti.

 

 

Sausainiai, Kukiai (COOKIES)

 

Sausainiukai. Paskirtis panaši kaip ir sesijų, tik visi duomenys saugomi kliento pusėje.

 

Naudojimas

Kukio užsetinimui naudojamas setcookie:

setcookie("kintamasis","reiksme", time() + 3600);

Taip užsetinamas kukis pavadinimu kintamasis o jo reikšmė yra „reiksme“. Galiojimo laikas - time() + 3600 (1 valanda nuo užsetinimo). Galiojimo laikas nurodomas sekundėmis.

 

Norint pasiekti kukį naudojame $_COOKIE[‘kintamasis’].

 

Kukio pašalinimas:

setcookie(„kintamas“,““,time() – 3600);

 

Viskas turėtų būti aišku, todėl pateiksiu pritaikymo pavyzdį. Paprastas loginas su sesijomis:

 

Login.php

<?php
if (isset($_POST['submit']))
{
$Username="Admin";
$Password="12345";
if (($_POST['user']==$Username) && ($_POST['pass']==$Password))
{
	session_start();
	$_SESSION['username']="Admin";
	echo "Prisijungimas pavyko<br><a href='admin.php'>Admino zona</a>";
}
else
	echo "Blogas user/pass";
}
else
{
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
<title>Login.php</title>
</head>
<body>
<form action="login.php" method="post">
<input type="text" name="user"><br>
<input type="password" name="pass"><br>
<input type="submit" name="submit">
</form>
</body>
</html>
<?php
}
?>

 

Admin.php

<?php
session_start();
if (isset($_SESSION['username']) && $_SESSION['username']=="Admin")
{
echo "Welcam back adminas!<br><a href='logout.php'>Atsijungti</a>";
}
else
echo "Neten pataikei =D";
?>

 

Logout.php

<?php
session_start();
session_destroy();
header("Location: login.php");
?>

 

Simple :D Veliau dar ką nors papeckiosiu gal :)

Redagavo Vilioshaz
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Na manau vilioshaz nesupyks ir truputį pridėsiu ir nuo saves kiek man yra tekę dirbti su sesijom, gal kas sužinos ko dar nežinoję ar pasimokys iš svetimų klaidų :lol:

 

Sesijos sukūrimui naudojame session_start(); ( Jis visada turi būti prieš bet kokį kitą output‘ą, net prieš <head> ir t.t.).

 

Apeiti šį pabostantį dalyką galima su ob_* funkcijom, konkrečiau skripto pradžio pasirašom ob_start(); o pabaigoj ob_end_flush(); ir nebesukam galvos dėl headerių problemų.

 

 

Norint sunaikinti sesija naudojama f-ja session_destroy();

 

Nenurodysiu tikslaus šaltinio tačiau kažkur esu skaitęs jog rekomenduojama pirma išvalyti sesijos masyvą, t.y.

$_SESSION = array(); session_destroy();

 

Taigi. Apie sesijas nėra ka daugiau ir pasakyti.

 

Na iš tiesų apie jas yra dar kas pridėti :) Tai gana galingas daiktas ir pritaikomas visur, vis populiarėjant ajax aplikacijoms tampa nepamainomas dalykas siekiant patogumo. Praktinis pavyzdys, sukuriama sesija ir pakraunamas puslapis. Vartotojas prisijungia, tuomet siunčia ajax užklausą į serverį. Ten vėl kuriam sesiją ir pagal ją nustatom jau jos prisijungusį savininką, atliekam skirtą scenarijų t.y. mums perduoti nereikia nieko, visi duomenys saugomi serveryje ir iš kliento pusės jis jų nebegalima pakeisti. Paprasčiausias būdas siunčiant ką panašaus į change_password.php?user=kazkas&pass=kazkas atrodo juokingas ir nesuprantamas, juk pakeiti user reikšmę ir siunti ką nori, tačiau net jau paprastas get'as change_password.php?pass=kazkas nebeleidžia keisti vartotojo, nes user nustatomas iš sesijos kintamojo.

 

Toliau saugumas. Nors sesijų duomenų iš vartotojo pusės pakeisti neįmanoma, tačiau įmanoma pavogti sesijos id, kas tolygu sesijos adreso pavogimui. Kiekvienas sesijos id yra unikalus ir nurodo į konkrečią duomenų rinkmeną, tad gavus kito asmens sesijos id ir savajį pakeitus juo, skriptas mano jog tu esi tas žmogus ir aišku manipuliuoji kito duomenimis kaip savo. Sesijos id saugomas arba cookie arba adreso laukelyje (jei naršyklėje cookies nepalaikomi arba taip nurodyta serverio konfigūracijoje). Norint apsaugoti vartotojus nuo sesijų vagysčių (kas atrodo paika, bet jei pavogiama administratoriaus sesija?) reikia kaip įmanoma vengti xss klaidų. Paprastai tariant kontroliuoti vartotojų įvedamą informaciją ir neleisti jiems įterpti javascript kodo. Sekantis būdas tai logginti visų sesijos id ip ir kiekvieną kartą prisijungus tikrinti ar tas sesijos id ateina iš tinkamo ip. Serverio sąnaudos išauga, tačiau ir saugumas ženkliai padidėja, net pavogus sesijos id teks gerai palaužyti galvą kaip ją praktiškai išnaudoti.

 

Sausainiukai. Paskirtis panaši kaip ir sesijų, tik visi duomenys saugomi kliento pusėje.

 

Sesijų atvejų kliento pusėje saugomas tik sesijos id, tuo jos kiek saugesnės, nėra tiesioginio priėjimo prie duomenų.

 

 

Na ir truputį apie cookies nuo manes.

Cookies yra savotiškas dalykas, jei man reikia rinktis tarp jų ir sesijų nedvejodamas rinkčiausi pastarasias, tačiau jie praverčia tada kai reikia manipuliuoti atitinkamai ir iš kliento pusės esančiais duomenimis. Kitaip tariant prie cookies gali prieiti ir javascript tad galima sugalvoti šiokių-tokių netradicinių scenarijų kas jau yra mane išgelbėję :D Kad ir kaip bebūtų pasinaudojus jau minėtomis xss klaidomis ir pavogus cookyje esančią informaciją vartotojas jau netenka visko kas jame buvo. O tai gali būti loginas, slaptažodis, pirkinių sąrašas ar dar bele žino kas. Tad aš visom keturiom už protingą sesijų naudojimą, nors viskas aišku priklauso nuo konkrečios situacijos :)

 

 

Daugiau skaitalų

 

http://lt.php.net/manual/en/ref.session.php

http://lt.php.net/manual/en/function.setcookie.php

http://www.cgisecurity.com/articles/xss-faq.shtml

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Stai ir mano problemos sprendimas... :)

Dekui Vilioshaz... :rolleyes:

 

Edited...

 

Gal kasnors zinot kaip cook'iu pagalba isvalyti ir anuliuoti sesija? Kazkur apie tai skaiciau, bet dabar neberandu...

Buciau begalo dekingas uz info...

Redagavo bics
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Stai ir mano problemos sprendimas... :D

Dekui Vilioshaz... :rolleyes:

 

Edited...

 

Gal kasnors zinot kaip cook'iu pagalba isvalyti ir anuliuoti sesija? Kazkur apie tai skaiciau, bet dabar neberandu...

Buciau begalo dekingas uz info...

Cook'iu pagalba?

Siaip tai sesija isvalo komanda session_unset(); o panaikina session_destroy(); :)

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Cook'iu pagalba?

Siaip tai sesija isvalo komanda session_unset(); o panaikina session_destroy(); :rolleyes:

Na taip, taip, sita puikiai zinau, tik esu kazkur skaites, jog imanoma padaryt, kad pasibaigus coocie galiojimo laikui butu isvaloma ir sunaikinama sesija... Turit minciu kaip tai igyvendinti?

Nuoroda į pranešimą
Dalintis kituose puslapiuose
  • po 3 savaičių...

Prisijunkite prie diskusijos

Jūs galite rašyti dabar, o registruotis vėliau. Jeigu turite paskyrą, prisijunkite dabar, kad rašytumėte iš savo paskyros.

Svečias
Parašykite atsakymą...

×   Įdėta kaip raiškusis tekstas.   Atkurti formatavimą

  Only 75 emoji are allowed.

×   Nuorodos turinys įdėtas automatiškai.   Rodyti kaip įprastą nuorodą

×   Jūsų anksčiau įrašytas turinys buvo atkurtas.   Išvalyti redaktorių

×   You cannot paste images directly. Upload or insert images from URL.

Įkraunama...
  • Dabar naršo   0 narių

    Nei vienas registruotas narys šiuo metu nežiūri šio puslapio.

×
×
  • Pasirinkite naujai kuriamo turinio tipą...