Transcript File
Leksion 13
1
Nevoja per qendrueshmeri
Marrim ne konsiderate shembujt:
Numerimi i vizitave ne nje website
Sa here e ka ngarkuar nje klient faqen tuaj web?
Pra faqja juaj .php duhet qe te kujtoje instancat e
meparshme te saj qe jane kerkuar nga nje klient.
2
Qendrueshmeria
Qendrueshmeria eshte aftesia e te dhenave per te
jetuar me gjate se ekzekutimi i programit qe i ka krijuar
ato.
Nje menyre e qarte per ta arritur kete eshte qe thjesht
te ruhen te dhenat ne nje skedar.
3
Qendrueshmeria dhe HTTP
Rikujtojme qe http eshte nje protokoll pa gjendje. Pra ai nuk
kujton asgje nga trasferimet e meparshme
Dy menyra per te arritur qendrueshmerine:
PHP cookies
PHP sessions
Client
HTTP
server
Session
Cookie
4
Cookies ne HTTP
Ne programimin ne internet, nje cookie eshte nje pakete informacioni
qe dergohet nga serveri tek klienti, dhe me pas kthehet mbrapsht ne
server sa here qe aksesohet nga klienti.
I shton gjendje HTTP-se (kujtojme: HTTP eshte pa gjendje)
Cookies transferohen ndermjet serverit dhe klientit me ane te http-se.
PHP suporton cookies te http-se
Cookies mund te mendohen edhe si “bileta” qe perdoren per te
identifikuar klientet dhe porosite e tyre.
5
Si jane implementuar cookies?
Cookies dergohen nga serveri tek klienti nepermjet
kokave te http-se me komanden “Set-Cookie”
Set-Cookie: NAME=VALUE; expires=DATE; path=PATH;
domain=DOMAIN_NAME; secure
Vlera e NAME eshte nje emer qe identifikon nje cookie
sipas kodimit URL
PATH dhe DOMAIN percaktojne se ku aplikohet cookie
6
setcookie(name,value,expire,path,domain,secure)
Parameter
Pershkrimi
name
(i detyrueshem). Percakton emrin e cookie
value
(i detyrueshem). Percakton vleren e cookie
expire
(opsional). Percakton se kur skadon cookie.
Psh: time()+3600*24*30 vendos qe cookie te skadoje pas 30 ditesh.
Nese ky parameter nuk eshte i vendosur, cookie do te skadoje ne fund te sesionit (kur
te mbyllet browseri).
path
(opsional). Percakton pathin ne server te cookie.
Nese eshte "/", cookie do te jete e vlefshme brenda te gjithe domainit.
Nese eshte "/phptest/", cookie do te jete e vlefshme vetem brenda direktorise test dhe
te gjithe nendirektorive te phptest.
Vlera default eshte direktoria aktuale ne te cilen po krijohet cookie.
domain
secure
(opsional). Percakton emrin e domainit te cookie.
Per ta bere cookien te vlefshme ne te gjithe nendomainet e example.com, atehere ju
duhet ta vendosni ate ".example.com".
Po ta vendosni www.example.com do ta beje cookie-n te vlefshme vetem ne
nendomainin www.
(opsional). Percakton nese cookie duhet te transmetohet vetem mbi nje lidhje te sigurte
HTTPS.
TRUE tregon qe cookie do te krijohet vetem nese ekziston nje lidhje e sigurte. Vlera
default eshte FALSE.
7
Cookies nga HTTP
Client (e.g. Firefox)
it026945
GET /*.html HTTP/1.1
Host: it026954.domain
HTTP/1.1 200 OK
Content-type: text/html
Set-Cookie:
name=value
GET /*.html HTTP/1.1
Host: it026945.domain
Cookie: name=value
Accept: */*
(content of page)
8
Krijimi i cookies ne PHP
Cookies mund te krijohen direkt duke manipuluar koken e
mesazhit HTTP me ane te funksionit header() ne PHP
<?php
header(“Set-Cookie: mycookie=myvalue; path=/;
domain=.coggeshall.org”);
?>
9
Krijimi i cookies me setcookie()
Perdorni funksionin setcookie() te PHP-se:
Setcookie (name,value,expire, path, domain, secure)
PSh:
<?php
setcookie("MyCookie",
$value, time()+3600*24);
setcookie("AnotherCookie", $value, time()+3600);
?>
Name: emri i skedarit
Value: te dhenat qe ruhen ne skedar
Expire: string te dhenash qe percakton jetegjatesine
Path: nenbashkesia e URL-ve ne nje domain ku ajo eshte e vlefshme
Domain: domain per te cilin cookie eshte e vlefshme
10
Secure: vendoset '1' per ta transmetuar ne HTTPS
Leximi i cookies
Per te aksesuar nje cookie te marre nga nje klient, perdorni vektorin
superglobal te PHP-se $_COOKIE
<?php
foreach ($_COOKIE as $key=>$val) {
print $key . " => " . $val . "<br/>";
}
?>
Cdo çeles ne vektor perfaqeson nje cookie – emri çeles eshte emri i
cookiet.
11
Shembull i krijimit dhe perdorimit
te cookie-ve
<?php
setcookie("MyCookie",
$value, time()+7200);
setcookie("AnotherCookie", $value, time()+7);
?>
<?php
foreach ($_COOKIE as $key=>$val) {
print $key . " => " . $val . "<br/>";
}
?>
Cookiet behen te dukshme vetem ne ngarkimin tjeter te
faqes
12
Perdorimi i headers (menyra e gabuar!)
<!DOCTYPE html PUBLIC "=//W3C//DTD XHMTL 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhmtl" xml:lang="en">
<head><title>PHP Script using Cookies</title>
<meta http-equiv="Content-Type" content="text/html; chatset=ISO-8859-1" />
</head>
<body>
<?php
$strValue = "This is my first cookie";
setcookie ("mycookie", $strValue);
echo "Cookie set<br>";
?>
</body>
</html>
Merr nje mesazh gabimi!:
Warning: Cannot modify header information - headers already sent by (output started
at /var/www/html/TESTandre/159339/PHP/cookie_with_headers.php:9) in
/var/www/html/TESTandre/159339/PHP/cookie_with_headers.php on line 11
13
Perdorimi i headers
setcookie() nuk u ekzekutua perpara se
informacioni te dergohej ne browser...
Cookiet duhet te dergohen perpara
elementeve te kokes
14
Perdorimi i headers (menyra e sakte)
<?php
$strValue = "This is my first cookie";
setcookie ("mycookie", $strValue);
echo "Cookie set<br>";
?>
<!DOCTYPE html PUBLIC "=//W3C//DTD XHMTL 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhmtl" xml:lang="en">
<head><title>PHP Script using Cookies</title>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
</head>
<body>
<?php
echo “<p> A cookie has been set. </p>”;
?>
</body>
</html>
Kjo eshte menyra e sakte
15
Fshirja e nje cookie
Per te fshire nje cookie duhet te caktoni daten e skadimit ne te
shkuaren:
<?php
// set the expiration date to one hour ago
setcookie("user", "", time()-3600);
?>
16
Cookie me shume elemente te dhenash
Perdorni explode() PSh:
<?php
$strAddress = $_SERVER['REMOTE_ADDR'];
$strBrowser = $_SERVER['HTTP_USER_AGENT'];
$strOperatingSystem = getenv('OS');
$strInfo = "$strAddress::$strBrowser::$strOperatingSystem";
setcookie ("somecookie4",$strInfo, time()+7200);
?>
<?php
$strReadCookie = $_COOKIE["somecookie4"];
$arrListOfStrings = explode ("::", $strReadCookie);
echo "<p>$strInfo</p>";
echo "<p>Your IP address is: $arrListOfStrings[0] </p>";
echo "<p>Client Browser is: $arrListOfStrings[1] </p>";
echo "<p>Your OS is: $arrListOfStrings[2] </p>";
?>
17
Ku ruhet cookie?
18
19
Sesionet ne PHP
Ju mund te ruani informacionin e perdoruesit (psh:
username, elementet e zgjedhur, etj.) ne anen e
serverit per ta perdorur me vone ne duke perdorur
sesionin PHP.
Sesionet punojne duke krijuar nga nje id unike (UID)
per çdo visitor dhe duke ruajtur variabla bazuar ne
kete UID.
UID ose ruhet ne nje cookie ose perhapet ne URL.
20
Kur duhet t’i perdorni sesionet?
Nevojiten te dhena te ruajtura ne server
Informacione sesioni unike per secilin perdorues
Te dhena kalimtare, qe nevojiten vetem per kohe te
shkurter
Te dhenat nuk ruajne informacion sekret
Ngjan me cookies, por ruhet ne server
Me i sigurte, kur krijohet sesioni nuk ka me te dhena qe
shkojne e vijne ndermjet makinave
Punon edhe nese cookies jane te ç’aktivizuara
Shembull: ne deshirojme te numerojme numrin e vizitave ne
faqen tone web.
21
Sesionet ne PHP
Perpara se te mund te ruani informacionin e perdoruesit ne
sesionin tuaj PHP, fillimisht ju duhet ta filloni sesionin.
Funksioni session_start() duhet te shfaqet PERPARA
tagut <html> .
<?php session_start(); ?>
<html>
<body>
</body>
</html>
22
Sesionet ne PHP
Fillimi i nje sesioni ne PHP:
<?php
session_start();
?>
• Kjo i tregon PHP-se qe kerkohet nje sesion.
• Nje ID sesioni me pas caktohet nga ana e serverit
• session ID ka nje paraqitje te tille:
sess_f1234781237468123768asjkhfa7891234g
23
Variablat e Sesionit
$_SESSION
Psh: $_SESSION[“intVar”] = 10;
Testimi nese nje variabel sesioni eshte krijuar apo jo:
session_start();
if (!isset($_SESSION['intVar'])) {...} //intVar is set or not
24
Regjistrimi i variablave te sesionit
Ne vend te caktimit te variablave superglobale, ju mund te
regjistroni variablat tuaj te sesionit ne me poshte:
<?php
$barney = “A big purple dinosaur.”;
$myvar_name = “barney”;
session_register($myvar_name);
?>
• $barney mund te aksesohet tashme “globalisht” nga nje sesion
ne tjetrin
Kjo punon vetem nese direktiva register_globals eshte e
aktivizuar ne php.ini – ne menyre default ajo eshte e ç’aktivizuar
25
Perdorimi i session_register() eshte i vjeteruar!
Krijoni variablat tuaj te sesionit
Me session_start() krijohet nje variabel sesioni default, i
cili e merr emrin nga emri i faqes
Per te krijuar variablat tuaj te sesionit, shtoni nje çeles
te ri ne variablin superglobal $_SESSION
$_SESSION[‘dug’] = “a talking dog.”;
26
Perdorimi i $_SESSION eshte i preferuar, qe nga PHP 4.1.0.
Shembull Sesioni 1
<?php
session_start();
if (!isset($_SESSION["intVar"]) ){
$_SESSION["intVar"] = 1;
} else {
$_SESSION["intVar"]++;
}
echo "<p>In this session you have accessed this page " .
$_SESSION["intVar"] . "times.</p>";
?>
27
Shembull Sesioni 2
<?php session_start();?>
<?php
$thisPage = $_SERVER['PHP_SELF'];
$pageNameArray = explode('/', $thisPage);
$pageName = $pageNameArray[count($pageNameArray) - 1];
print "The name of this page is: $pageName<br/>";
$nameItems = explode('.', $pageName);
$sessionName = $nameItems[0];
print "The session name is $sessionName<br/>";
if (!isset($_SESSION[$sessionName])) {
$_SESSION[$sessionName] = 0;
print "This is the first time you have visited this page<br/>";
}
else {
$_SESSION[$sessionName]++;
}
print "<h1>You have visited this page " . $_SESSION[$sessionName] .
" times</h1>";
?>
28
Mbarimi i sesionit
unset($_SESSION[‘name’])
–Fshin nje variabel sesioni
session_destroy()
– Shkaterron te gjitha te dhenat e regjistruara ne nje sesion
– nuk i ben unset variablave globale te sesionit dhe cookie-ve qe
lidhen me sesionin
–Normalisht nuk perdoret – lihet te skadoje
29
Shkaterrimi i plote i nje sesioni
<?php
// Initialize the session.
// If you are using session_name("something"), don't forget it now!
session_start();
// Unset all of the session variables.
$_SESSION = array();
// If it's desired to kill the session, also delete the session cookie.
// Note: This will destroy the session, and not just the session data!
if (ini_get("session.use_cookies")) { // Returns the value of the configuration option
$params = session_get_cookie_params();
setcookie(session_name(), '', time() - 42000,
$params["path"], $params["domain"],
$params["secure"], $params["httponly"]
Kthen emrin e sesionit
);
aktual
}
// Finally, destroy the session.
session_destroy();
?>
30
http://nz2.php.net/manual/en/function.session-destroy.php
Shembull Sesioni 3
<?php
session_start();
if(!isset($_SESSION['strColourBg'])) $_SESSION['strColourBg'] = "red";
else echo "Currently Bg set to " . $_SESSION['strColourBg'] . "<br>";
if(!isset($_SESSION['strColourFg'])) $_SESSION['strColourFg'] = "yellow";
else echo "Currently Fg set to " . $_SESSION['strColourFg'];
if(isset($_POST["submit"]) ) {
$strColourBg = $_POST["strNewBg"];
$strColourFg = $_POST["strNewFg"];
$_SESSION['strColourBg'] = $strColourBg;
$_SESSION['strColourFg'] = $strColourFg;
echo "<br>New Settings";
}
else {
$strColourBg = $_SESSION['strColourBg'];
$strColourFg = $_SESSION['strColourFg'];
echo "<br>Keep old settings";
}
?>
31
Shembull Sesioni 3 (vazhd.)
<html><head> <style type="text/css">
body {background-color: <?php echo $strColourBg ?>;}
p {color: <?php echo $strColourFg?>;}
h2 {color: <?php echo $strColourFg?>;}
</style></head>
<body>
<h2>h2 colour</h2>
<form action = '<?php echo $_SERVER["PHP_SELF"] ?>' method='post'>
<label for="strNewBg"> Background colour: </label>
<select name='strNewBg' id='strNewBg'>
<option>red</option> <option>grey</option>
</select>
<label for="strNewFg"> Text colour: </label>
<select name='strNewFg' id='strNewFg'>
<option>yellow</option> <option>grey</option>
</select>
<input type='submit' name='submit'/>
</form></body></html>
32
Permbledhje
Sesionet dhe cookiet ne PHP jane mekanizma
per te shtuar gjendje ne transaksionet HTTP.
33
• Pyetje?
34