07_Session dan Cookie
Session dan Cookie
Aryo Pinandito, ST, M.MT Fajar Pradana, S.ST, M.Eng Issa Arwani, S.Kom, M.Sc
1 . PEN D AH U LUAN 1.1 Pengant ar 1.2 Tuj uan
2 . SESSI ON D AN COOKI E 2.1 Session
2.2 Cook ie
2.3 Page Redirect ion
1 . PEN D AH ULUAN
1 .1 Pe n ga n t a r
Bagian ini berisi t ent ang cara at au m et ode unt uk m enelusuri int erak si dengan para pengguna. Karena seiring dengan berj alanny a w ak t u suat u saat ak an m uncul suat u perm asalahan dim ana k et ik a int erak si dengan pengguna perlu dit elusuri daripada hany a sek edar m em buat sebuah halam an w eb dengan m enggunak an PHP.
Session dan cook ie sangat erat k ait anny a dalam pr oses m eny im pan infor m asi int erak si dengan pengguna sehingga inform asi y ang diperoleh dari pengguna m elalui int erak si dengan halam an w eb sebelum ny a dapat “ diingat ” . Den gan m enggunak an session dan cook ie, suat u inform asi dalam su at u v ariabel dapat disim pan dan diberik an dari suat u halam an w eb ke halam an w eb lainny a t anpa perlu m enggunak an for m m elalui elem en input y ang t ersem buny i.
Cont oh aplik asi sederhana dari pem anfaat an session dan cook ie adalah proses dan sist em login. Dalam proses sist em login, seorang pengguna y ang t elah login dapat m engak ses halam an- halam an t ert ent u y ang t idak dapat diak ses oleh publik t anpa perlu m engident ifik asi pengguna set iap k ali m engak ses halam an t ersebut .
1 .2 Tu j u a n
Tuj uan dalam pem belaj aran ini adalah m ahasisw a m enget ahui, m em aham i, dan m am pu m engim plem ent asik ansession dan cook ie pada aplik asi ber basis w eb y ang bersifat int erak t if dan m em erluk an sist em y ang dapat m eny im pan inform asi unt uk m enelusuri int eraksi dengan pengguna.
7
S
E
L
F
-P
RO
P
A
G
A
T
IN
G
E
N
T
RE
P
RE
N
E
U
RI
A
L
E
D
U
C
A
T
IO
N
D
E
V
E
L
O
P
M
E
N
T
MODUL
(2)
2 . SESSI ON D AN COOKI E
2 .1 Se ssion
Session dalam proses br ow sing h alam an- halam an w eb sangat ber guna unt uk m elacak perilak u dan apa y ang dilak uk an oleh pengguna m elalui int erak si dengan halam an w eb. I nt erak si dengan pengguna dapat dilacak dalam selang w ak t u y ang lebih lam a daripada periode y ang diperluk an unt uk m engk esek usi sebuah script unt uk m enghasilk an sebuah halam an w eb at au unt uk m endow nload sebuah halam an w eb.
Gam bar 7.1 Session y ang disim pan oleh w eb brow ser dalam bent uk cookie ( at as) dan session y ang disim pan dalam bent uk file oleh w eb serv er dalam folder / t m p ( baw ah)
Prot ok ol HTTP bersifat st at eless, yait u t idak bisa m eny im pan suat u inform asi at au k ondisi pada ak t iv it as pengguna sebelum ny a. Oleh k arena it u, j ik a suat u halam an w eb y ang dipresent asik an kepada user bergant ung k epada int eraksi y ang dilak uk an user t ersebut sebelum ny a at au perlu m engident ifik asi siapa pengguna y ang m engak ses suat u halam an w eb, m ak a script PHP y ang digunak an harus m eny im pan dan/ at au m enggunak an inform asi y ang m em bedak an ant ara user y ang sat u dengan y ang lainny a.
Sebuah session m eny im pan suat u ident ifier y ang sam a di k om put er serv er w eb dan di k om put er pengguna ( sebagai cook ie) . Cook ie t ersebut digunak an oleh w eb serv er unt uk m engenalisuat u k om unik asi dan/ int erak si dengan pengguna y ang sam a sepert i y ang diperlihat k an dalam Gam bar 7.1.
(3)
Ket ik a sebuah session diinisialisasi, serv er ak an m eny im pan inform asi dalam v ariabel session y ang dapat diak ses oleh halam an web lain selam a session- ny a t et ap akt if. Seluruh inform asi y ang t erdapat dalam v ariabel session ak an disim pan pada k om put er serv er dalam file session. Di sisi k om put er pengguna, inform asi y ang disim pan hany a k ode acak heksadesim al 32 k arak t er y ang m enj adi ident ifier- ny a saj a.
Gam bar 7.2 I nform asi y ang t erdapat dalam v ariabel session ak an disim pan dalam file session pada k om put er serv er
Secara norm al, session ak an t et ap ak t if hingga j endela brow ser dit ut up. Pengguna lain t idak dapat m elihat session y ang dim ilik i oleh pengguna lain, k arena ident ifier y ang diberik an oleh serv er bersifat unik , hek sadesim al acak sepanj ang 32 k arak t er.
M e m bu a t Se ssion
Unt uk m em buat sebuah session dan m eny im pan inform asi y ang dapat digunak an di seluruh halam an w eb lainny a, cuk up dilak ukan dengan m enggunak an k ode PHP berik ut dibagian at as script PHP se be lu m script PHP m engeluark an out put :
session_start();
Ca t a t a n
Walaupun infor m asi y ang disim pan dalam file session pada w eb serv er dalam for m at file t ek s biasa ( plain- t ex t ) , file t ersebut t idak dapat diak ses secara langsung oleh w eb brow ser y ang digunak an oleh pengguna. Kecuali j ik a t erj adi k esalahan k onfigurasi sehingga file session y ang dibuat oleh w eb server dilet ak k an pada direk t ori y ang t erdapat di dalam docum ent root w eb serv er sehingga file session t ersebut m enj adi accessible m elalui web brow ser.
Secara default , session dapat digunak an t anpa perlu m engubah k onfigurasi t ert ent u. Nam un session sangat bergant ung pada cook ie. Jik a penggunaan cook ie dinon- ak t ifk an pada w eb br ow ser pengguna, m ak a session t idak dapat bekerj a dengan baik . Walaupun session ident ifier dapat diberik an m elalui query st ring, penggunaanny a sangat t idak dianj urk an dengan alasan k eam anan.
Ca t a t a n
Jik a out put t elah dik eluark an sebelum k ode PHP t ersebut dij alank an, m isalny a dengan fungsi echo() at au out put HTML lain, m ak a fungsi session t idak dapat diak t ifk an unt uk halam an w eb t ersebut . Hal ini pent ing unt uk diket ahui agar t idak t erj adi k egagalan dalam m enggunak an session. Error " Headers already sent " m erupak an indik asi y ang diak ibat k an oleh k esalahan ini.
(4)
M e m bu a t da n M e n gh a pu s V a r ia b e l Se ssion
Unt uk m em buat sebuah v ariabel session, dengan k at a lain m eny im pan infor m asi dalam session, dapat dilak uk an dengan m enggunak an superglobal array $_SESSION. Sebagai cont oh, k ode PHP berik ut m eny im pan suat u nilai v ariabel k e dalam session:
<?php
session_start();
// simpan nilai dalam variabel session dengan nama index 'nama' $_SESSION['nama'] = 'Panda';
?>
Sedangk an k ode PHP berik ut digunak an unt uk m enam pilk an nilai v ar iabel session y ang sudah disim pan sebelum ny a dari halam an w eb lain:
<?php
session_start();
// tampilkan nilai dalam variabel session dengan nama index 'nama' // baris kode berikut akan menampilkan 'Panda'
echo $_SESSION['nama'];
?>
Unt uk m enghapus nilai v ariabel session, gunak an k ode PHP berik ut :
<?php
session_start();
// tampilkan nilai dalam variabel session dengan nama index 'nama' // baris kode berikut akan menampilkan 'Panda'
unset( $_SESSION['nama'] );
echo $_SESSION['nama']; // undefined
?>
Sedangk an unt uk m enghapus session dan m enghapus seluruh inform asi didalam ny a dapat dilak uk an m enggunak an k ode PHP berik ut :
<?php
session_start(); session_destroy();
?>
(5)
Script PHP sederhana berik ut m em perlihat k an penggunaan session unt uk m engenali j um lah k unj ungan dari pengguna dan m enam pilk an cont ent y ang berbeda k et ik a seorang pengguna pert am a k ali m engunj ungi suat u halam an w eb dengan k unj ungan berik ut ny a pada halam an w eb y ang sam a.
<?php // file visit.php session_start(); ?>
<HTML> <HEAD>
<TITLE>Halo!</TITLE> </HEAD>
<BODY>
<H2>Selamat Datang!</H2> <?php
if (!isset($_SESSION['visit_count'])) {
echo "Halo, Anda pasti baru saja mengunjungi halaman ini."; $_SESSION['visit_count'] = 1;
} else {
$visit_count = $_SESSION['visit_count'] + 1;
echo "Wah, Anda kembali lagi ya? Sudah $visit_count kali lho!"; $_SESSION['visit_count'] = $visit_count;
}
$self_url = $_SERVER['PHP_SELF'];
echo "<BR><A HREF=\"$href\">Datang lagi</A> kapan-kapan! Ditunggu lho."; ?>
</BODY> </HTML>
Ket ik a pert am a k ali pengunj ung m engak ses halam an t ersebut ak an disapa dengan pesan y ang m engat ak an bahw a pengunj ung t ersebut baru pert am a k ali m engunj ungi halam an w eb sepert i y ang diperlihat k an dalam Gam bar 7.3.
Gam bar 7.3 Tam pilan halam an w eb ket ik a pert am a dik unj ungi oleh pengguna.
Pada k unj ungan pengguna y ang berik ut ny a, k ode PHP t elah m engenali bahw a k unj ungan t ersebut buk an kunj ungan y ang pert am a dari v ariabel session, sehingga pesan y ang dit am pilk an berbeda dari pesan pada k unj ungan y ang pert am a, sepert i y ang diperlihat k an dalam Gam bar 7.4.
Selain fungsi session y ang disebut k an sebelum ny a, PHP j uga m eny ediak an fungsi-fungsi lain t erk ait dengan m anipulasi session, sepert i m engubah nam a session, m em buat session ident ifier y ang baru, dan m em erik sa apak ah sebuah nam a v ariabel t elah berada di
(6)
dalam session at au belum . Beberapa fungsi built - in PHP y ang t erk ait dengan session diperlihat k an padaTabel 7.1.
Gam bar 7.4 Tam pilan halam an w eb ket ik a dikunj ungi oleh pengguna unt uk k edua k aliny a Tabel 7.1 Fungsi- fungsi dalam PHP y ang dapat digunak an unt uk m em anipulasi session
Fungsi Desk ripsi
session_start() Menginisialisasi session, j ik a session ident ifier dit em uk an
m elalui cook ie, m et hod GET at au POST, m ak a seluruh v ariabel y ang t elah didaft ark an sebelum ny a ak an berada dalam v ariabel superglobal $_SESSI ON. Jik a session
ident ifier t idak dit em uk an, m ak a PHP ak an m enginisialisasi ident ifier y ang baru.
session_register() Mendaft ark an st ring y ang m enj adi k ey v ariabel session
session_unregister() Menghapus st ring y ang m enj adi k ey v ariabel session
session_is_registered() Mem erik sa apak ah sebuah st ring k ey t elah t erdaft ar dalam
session
session_destroy() Menghapus seluruh v ariabel y ang t erdaft ar dalam session.
Session ident ifier y ang digunak an t et ap sam a.
session_unset() Menghapus seluruh v ariabel y ang t erdaft ar dalam session.
session_name() Menghasilk an nam a session, biasanya 'PHPSESSID'.
session_module_name() Menghasilk an nam a m odul y ang digunak an unt uk
m eny im pan inform asi session, um u m ny a 'files'.
session_save_path() Menghasilk an at au m enent uk an direk t ori dim ana file- file
session disim pan.
session_id() Menghasilk an session ident ifier y ang sedang digunak an
session_regenerate_id() Mem buat session ident ifier y ang bar u.
2 .2 Cook ie
Cook ie t idak j auh berbeda dengan session. Secara definisi, cook ie adalah sebagian k ecil dari infor m asi y ang disim pan dalam m em ori peny im panan aplik asi w eb br ow ser pengguna at au dalam file y ang disim pan dalam k om put er client ( pengguna) . Cook ie berisi pasangan nam a dan nilai. Mem baca sebuah cook ie, berart i m enggunak an nam a cook ie unt uk m endapat k an nilainy a. Cook ie hany a dapat dibaca oleh serv er y ang m em buat ny a, sehingga serv er lain t idak
(7)
dapat m em anipulasi cook ie y ang dibuat oleh serv er lain. Nam un inform asi y ang disim pan dalam cook ie dapat dibaca oleh pengguna, baik it u pengguna y ang sedang m engak ses halam an w eb, m aupun pengguna lain y ang sedang m enggunak an kom put er y ang sam a. Sehingga penggunaan cook ie dapat dik at ak an t idak am an dan t idak direk om endasik an unt uk m eny im pan inform asi y ang sifat nya sensit if sepert i passw ord pengguna, nom or rek ening bank , dan inform asi sensit if lainny a.
Beberapa hal y ang harus diperhat ikan dalam m enggunak an cook ie unt uk m erek am int eraksi dengan pengguna adalah sebagai berik ut :
• Sebuah w ebsit e t idak dapat m em buat lebih dari 20 cook ie dalam sat u dom ain y ang sam a.Uk uran t iap cook ie dibat asi m ak sim um sebesar 4KB k arena cook ie disim pan dalam k om put er pengguna.
• Sebuah cook ie m em ilik i 5 m acam at ribut , y ait u Name, Expires, path, domain, dan
secure.
• Dari k elim a m acam at ribut y ang dim ilik i oleh cook ie, hany a at ribut Name y ang harus ada.
• Oleh k arena cook ie digunak an unt uk m erek am infor m asi m engenai ak t iv it as pengguna t erhadap suat u sit us t ert ent u, cook ie hany a dapat digunak an oleh sit us y ang m em buat cook ie t ersebut .
M e m bu a t Cook ie
Dengan PHP, cook ie dibuat dengan m enggunak an fungsi set cook ie( ) yang m enerim a enam m acam ar gum en, y ak ni nam a cook ie, nilai, w ak t u k adaluarsa dalam for m at UNI X t im est am p, pat h, dom ain, dan sebuah flag y ang m engindik asik an st at us k em anan cook ie. Hany a argum en pert am a y ang diperluk an , sisany a bersifat opsional. Cook ie dibaca oleh serv er ham pir secara ot om at is, nam a dan nilai v ariabel- v ariabel cook ie dapat diak ses m elalui array superglobal $_COOKIE dengan nam a cook ie sebagai index - ny a.
Berik ut ini adalah cont oh script PHP unt uk m em buat cook ie:
<?php // file setcookie.php
// contoh membuat sebuah cookie dengan nama 'username' bernilai 'kang_admin' // cookie akan kadaluwarsa dalam waktu 1 hari (86400 detik)
$sukses = setcookie('username', 'kang_admin', mktime()+86400, '/');
// periksa apakah cookie berhasil dibuat // jika gagal, tampilkan pesan kesalahan if (!$sukses)
echo "Cookie gagal dibuat.";
?>
Fungsi setcookie() ak an m em berik an nilai t rue j ik a cook ie berhasil dibuat , dan false j ik a sebalik ny a. Cont oh k ode PHP berik ut ini m em perlihat k an cara unt uk m em buat 3 cook ie y ang berbeda unt uk dom ain y ang sam a dengan w ak t u k adaluw arsa cook ie y ang berbeda- beda:
<?php // setcookie.multiple.php
setcookie('username', 'kang_admin', mktime()+86400, '/'); setcookie('status', '2', mktime()+1800, '/secure/web/'); setcookie('warganegara', 'ID', 0, '/');
(8)
?>
M e m ba ca Cook ie
Set elah cook ie berhasil dibuat , cook ie t ersebut dapat dibaca dengan m enggunak an array superglobal $_COOKIE dengan nam a v ariabel cook ie sebagai array k ey - ny a. Sebagai cont oh, k ode PHP berik ut ak an m enam pilk an pesan y ang berbeda k et ik a sebuah cook ie dit em uk an oleh serv er:
<?php // filename: readcookie.php
// Jika cookie dengan nama 'username' ditemukan, sapa namanya. // Jika tidak, tampilkan pesan sambutan lain secara umum. if ($_COOKIE['username']){
echo "Selamat datang, " . $_COOKIE['username']; }
else {
echo "Apakah ini pertama kalinya Anda mengunjungi situs ini? Jika ya, selamat datang, selamat menikmati sajian istimewa dari kami.";
}
?>
Unt uk m em erik sa apak ah cook ie berhasil dibuat dan m elihat seluruh isi y ang t erdapat dalam cook ie, PHP m eny ediak an fungsi print _r( ) unt uk m enam pilk an seluruh isi v ariabel ar ray . Sehingga k ode PHP berik ut ini dapat digunak an unt uk m enam pilk an seluruh isi dari v ariabel superglobal array $_ COOKI E:
<?php // filename: dump.cookie.php
setcookie('username', 'kang_admin', mktime()+86400, '/'); setcookie('status', '2', mktime()+1800, '/secure/web/'); setcookie('warganegara', 'ID', 0, '/');
print_r($_COOKIE);
?>
M e n gh a pu s Cook ie
Cook ie dapat dihapus dengan m enggunak an fungsi y ang sam a dengan fungsi y ang digunak an unt uk m em buat cook ie, y ait u fungsi setcookie(). Perbedaanny a t erdapat pada w ak t u k adaluarsa y ang diber ik an sebagai argu m en fungsi t ersebut . Unt uk m enghapus cook ie, gunak an w ak t u k adaluarsa y ang berada di m asa lam pau. Wak t u k adaluarsa di m asa lam pau dapat diberik an dengan nilai y ang lebih k ecil dari nilai y ang diberik an oleh fungsi mktime()
at au time(). Nilai y ang diberik an oleh fungsi time() dan mktime() adalah j um lah det ik y ang t erj adi hingga saat ini sej ak w ak t u Epoch, y ait u sej ak 1 Januari 1970 puk ul 00: 00.
Cont oh k ode PHP y ang dapat digunak an unt uk m enghapus cook ie dengan nam a cook ie
'username' adalah sebagai berik ut :
<?php // filename: deletecookie.php
(9)
?>
Dengan m em berik an nilai w ak t u k adaluarsa di m asa lam pau mktime()-10000, m ak a v ariabel cook ie dengan nam a 'username' ak an m enj adi k adaluarsa dan dihapus dari k om put er client oleh w eb br ow ser.
2 .3 Pa ge Re dir e ct ion
Session dan cook ie bany ak dim anfaat k an unt uk m em fasilit asi proses login, dim ana pengguna y ang t elah diot ent ik asi ( t elah login) dapat m engak ses halam an- halam an t ert ent u y ang sifat ny a t idak t erbuk a oleh um um . At au j ik a pengguna m em ak sa unt uk m engak ses halam an y ang t idak dapat digunak an sebelum diot ent ik asi t erlebih dahulu, m ak a pengguna t ersebut ak an dialihk an k e halam an login unt uk diot ent ik asi.
Page redirect ion secara sederhana dapat dilak uk an dengan fungsi PHP header()berik ut :
<?php
$url_tujuan = "http://google.com"; header("Location: " . $url_tujuan); exit;
?>
Proses login secara sederhana dapat digam bark an dengan langk ah- langk ah berik ut :
1. Penguna m em asuk k an usernam e dan/ at au passw ord- ny a pada halam an login y ang disediak an. Halam an login t ersebut sederhanany a adalah sebuah dok um en HTML y ang berisi for m y ang dapat digunak an unt uk m enerim a m asuk an usernam e dan passw ord dari pengguna dan k em udian m engirim k anny a pada serv er unt uk diot ent ik asi. Berik ut ini adalah cont oh halam an HTML y ang berisi form unt uk m enerim a m asuk an dari pengguna dan dik irim k an k e halam an aut hent icat e.php unt uk diot ent ikasi. Dok um en HTML berik ut disim pan dalam nam a file: login.php.
<!DOCTYPE html> <html> <body>
<form name="login" action="authenticate.php" method="post"> Username: <input type="text" name="username" /><br /> Password: <input type="password" name="password" /><br /> <input type="submit" value="Login" />
</form>
Ca t a t a n
Fungsi setcookie() t idak m em ber ik an j am inan bahw a cook ie y ang dibuat oleh fungsi t ersebut ak an berhasil dibuat . Ter ut am a j ik a w eb brow ser y ang digunak an oleh client m enolak unt uk m enerim a cook ie, dengan k at a lain, m enon- ak t ifk an fit ur cook ie. Fungsi
setcookie() hany a m encoba unt uk m engirim k an inform asi header unt uk m eny im pan cook ie pada k om put er client , selanj ut ny a diserahk an pada k om put er client unt uk m enerim a at au m enolak cook ie y ang diberik an oleh w eb serv er.
Dengan dem ik ian nilai boolean y ang dihasilk an oleh fungsi setcookie() t idak m eny at ak an bahw a cook ie y ang dik irim k an oleh serv er dit erim a at au dit olak oleh k om put er client .
(10)
</body> </html>
Met hod y ang digunak an pada form t ersebut di at as adalah POST, sehingga usernam e dan passw ord y ang dim asuk k an oleh user t idak ak an dit am pilk an pada query st ring di alam at URL.
2. Halam an ot ent ik asi m enerim a usernam e dan passw ord y ang dim asuk k an oleh pengguna m elalui form pada t ahap sebelum ny a. Jik a ot ent ik asi berhasil dilak uk an, m ak a serv er ak an m em buat v ariabel session at au cook ie y ang m engindik asik an bahw a proses ot ent ik asi berhasil dilak uk an, m isalny a dengan k ode PHP berik ut :
<?php // filename: authenticate.php
session_start();
// buffer output, sehingga error yang mungkin muncul // tidak mengganggu proses redirect dengan fungsi header() // jika output muncul sebelum fungsi header dijalankan, // maka proses redirect akan gagal.
ob_start();
function correct($user, $pass) {
if( $user == "admin" && $pass == "rahasia" ) return true;
else return false; }
if( correct($_POST['username'], $_POST['$password']) ) $_SESSION['logged_in'] = true;
header("Location: secret.php"); else {
header("Location: login.php"); exit;
}
?>
3. Set elah pengguna berhasil diot ent ikasi m elalui pr oses pada t ahap 2, m ak a pengguna ak an dialihk an ke halam an " secret .php" . Halam an ini bert ugas unt uk m em erik sa v ariabel session y ang disim pan. Jik a v ariabel session logged_in dit em uk an dan bernilai true, m ak a halam an secret .php ak an m enam pilk an suat u pesan y ang m engindik asik an pengguna t ersebut berhasil login, nam un j ik a t idak dit em uk an dan t idak bernilai t rue, m ak a alihk an kem bali user k e halam an login. Berik ut ini adalah cont oh k ode PHP unt uk halam an " secret .php" :
<?php // filename: secret.php
// inisialisasi session, karena status otentikasi disimpan dalam session session_start();
if(isset($_SESSION[]) && $_SESSION[] == true) { echo "Selamat Anda berhasil login!";
(11)
header("Location: login.php"); exit; }
(12)
REFEREN SI
Vasw ani, Vik ram . 2005. How t o do Ev ery t hing w it h PHP & My SQL. McGraw - Hill/ Osborne. New York
Suehring, St ev e, Conv erce, Tim ; Park , Joy ce; 2009. PHP6 and My SQL 6 Bible. Wiley Publishing, I nc., I ndianapolis, I ndian a
Beighley , Lynn; Morrison, Michael. 2009. Head First PHP and My SQL. O'Reilly Media, I nc. USA.
PROPAGASI
A. La t ih a n da n D isk u si ( Pr opa ga si V e r t ik a l da n H or iz on t a l)
1. Buat lah sebuah script PHP y ang dapat digunak an unt uk m engak om odasi k ebut uhan unt uk login sepert i y ang t elah dicont ohk an dalam sub- bab Page Redirect ion, nam un m enggunak an cook ie sebagai t em pat unt uk m eny im pan inform asi st at us login pengguna.
B. Tu ga s ( Ev a lu a si m a n dir i)
1. Jelask an apa y ang dim ak sud dengan session, cook ie, dan HTTP header?
2. Mengapa page redirect ion dapat dilak uk an dengan m enggunak an fungsi header( ) y ang dim ilik i oleh PHP?
3. Mengapa k it a t idak disarank an unt uk m eny im pan passw ord pengguna k e dalam v ariabel cook ie? Bagaim ana j ik a passw ord t ersebut disim pan dalam session? Jelask an!
C. Pe n ga y a a n Kom pe t e n si ( Ev a lua si m a n dir i)
1. Buat lah sebuah halam an w eb y ang dapat m enam pilk an seluruh pengguna y ang sedang online ( t elah login) dalam k urun w ak t u 24 j am t erak hir besert a k apan w ak t u t erak hir pengguna t ersebut berhasil login.
2. Buat lah sebuah program k eranj ang belanj a sederhana unt uk t ok o online, dim ana pengguna bisa m em asuk k an daft ar barang belanj aan y ang dibeliny a k e dalam k eranj ang belanj a besert a j um lahny a unt uk dit am pilk an dalam pr oses check out . Cont oh w ebsit e t ok o online y ang m em ilik i fit ur aplik asi k eranj ang belanj a:
• Bhinnek a ( ht t p: / / bhinnek a.com ) • Cam era ( ht t p: / / cam era.co.id) • Am azon ( ht t p: / / am azon.com )
(1)
dapat m em anipulasi cook ie y ang dibuat oleh serv er lain. Nam un inform asi y ang disim pan dalam cook ie dapat dibaca oleh pengguna, baik it u pengguna y ang sedang m engak ses halam an w eb, m aupun pengguna lain y ang sedang m enggunak an kom put er y ang sam a. Sehingga penggunaan cook ie dapat dik at ak an t idak am an dan t idak direk om endasik an unt uk m eny im pan inform asi y ang sifat nya sensit if sepert i passw ord pengguna, nom or rek ening bank , dan inform asi sensit if lainny a.
Beberapa hal y ang harus diperhat ikan dalam m enggunak an cook ie unt uk m erek am int eraksi dengan pengguna adalah sebagai berik ut :
• Sebuah w ebsit e t idak dapat m em buat lebih dari 20 cook ie dalam sat u dom ain y ang sam a.Uk uran t iap cook ie dibat asi m ak sim um sebesar 4KB k arena cook ie disim pan dalam k om put er pengguna.
• Sebuah cook ie m em ilik i 5 m acam at ribut , y ait u Name, Expires, path, domain, dan secure.
• Dari k elim a m acam at ribut y ang dim ilik i oleh cook ie, hany a at ribut Name y ang harus ada.
• Oleh k arena cook ie digunak an unt uk m erek am infor m asi m engenai ak t iv it as pengguna t erhadap suat u sit us t ert ent u, cook ie hany a dapat digunak an oleh sit us y ang m em buat cook ie t ersebut .
M e m bu a t Cook ie
Dengan PHP, cook ie dibuat dengan m enggunak an fungsi set cook ie( ) yang m enerim a enam m acam ar gum en, y ak ni nam a cook ie, nilai, w ak t u k adaluarsa dalam for m at UNI X t im est am p, pat h, dom ain, dan sebuah flag y ang m engindik asik an st at us k em anan cook ie. Hany a argum en pert am a y ang diperluk an , sisany a bersifat opsional. Cook ie dibaca oleh serv er ham pir secara ot om at is, nam a dan nilai v ariabel- v ariabel cook ie dapat diak ses m elalui array superglobal $_COOKIE dengan nam a cook ie sebagai index - ny a.
Berik ut ini adalah cont oh script PHP unt uk m em buat cook ie: <?php // file setcookie.php
// contoh membuat sebuah cookie dengan nama 'username' bernilai 'kang_admin' // cookie akan kadaluwarsa dalam waktu 1 hari (86400 detik)
$sukses = setcookie('username', 'kang_admin', mktime()+86400, '/'); // periksa apakah cookie berhasil dibuat
// jika gagal, tampilkan pesan kesalahan if (!$sukses)
echo "Cookie gagal dibuat."; ?>
Fungsi setcookie() ak an m em berik an nilai t rue j ik a cook ie berhasil dibuat , dan false j ik a sebalik ny a. Cont oh k ode PHP berik ut ini m em perlihat k an cara unt uk m em buat 3 cook ie y ang berbeda unt uk dom ain y ang sam a dengan w ak t u k adaluw arsa cook ie y ang berbeda- beda: <?php // setcookie.multiple.php
setcookie('username', 'kang_admin', mktime()+86400, '/'); setcookie('status', '2', mktime()+1800, '/secure/web/'); setcookie('warganegara', 'ID', 0, '/');
(2)
?>
M e m ba ca Cook ie
Set elah cook ie berhasil dibuat , cook ie t ersebut dapat dibaca dengan m enggunak an array superglobal $_COOKIE dengan nam a v ariabel cook ie sebagai array k ey - ny a. Sebagai cont oh, k ode PHP berik ut ak an m enam pilk an pesan y ang berbeda k et ik a sebuah cook ie dit em uk an oleh serv er:
<?php // filename: readcookie.php
// Jika cookie dengan nama 'username' ditemukan, sapa namanya. // Jika tidak, tampilkan pesan sambutan lain secara umum. if ($_COOKIE['username']){
echo "Selamat datang, " . $_COOKIE['username']; }
else {
echo "Apakah ini pertama kalinya Anda mengunjungi situs ini? Jika ya, selamat datang, selamat menikmati sajian istimewa dari kami.";
} ?>
Unt uk m em erik sa apak ah cook ie berhasil dibuat dan m elihat seluruh isi y ang t erdapat dalam cook ie, PHP m eny ediak an fungsi print _r( ) unt uk m enam pilk an seluruh isi v ariabel ar ray . Sehingga k ode PHP berik ut ini dapat digunak an unt uk m enam pilk an seluruh isi dari v ariabel superglobal array $_ COOKI E:
<?php // filename: dump.cookie.php
setcookie('username', 'kang_admin', mktime()+86400, '/'); setcookie('status', '2', mktime()+1800, '/secure/web/'); setcookie('warganegara', 'ID', 0, '/');
print_r($_COOKIE); ?>
M e n gh a pu s Cook ie
Cook ie dapat dihapus dengan m enggunak an fungsi y ang sam a dengan fungsi y ang digunak an unt uk m em buat cook ie, y ait u fungsi setcookie(). Perbedaanny a t erdapat pada w ak t u k adaluarsa y ang diber ik an sebagai argu m en fungsi t ersebut . Unt uk m enghapus cook ie, gunak an w ak t u k adaluarsa y ang berada di m asa lam pau. Wak t u k adaluarsa di m asa lam pau dapat diberik an dengan nilai y ang lebih k ecil dari nilai y ang diberik an oleh fungsi mktime() at au time(). Nilai y ang diberik an oleh fungsi time() dan mktime() adalah j um lah det ik y ang t erj adi hingga saat ini sej ak w ak t u Epoch, y ait u sej ak 1 Januari 1970 puk ul 00: 00.
Cont oh k ode PHP y ang dapat digunak an unt uk m enghapus cook ie dengan nam a cook ie 'username' adalah sebagai berik ut :
<?php // filename: deletecookie.php
(3)
?>
Dengan m em berik an nilai w ak t u k adaluarsa di m asa lam pau mktime()-10000, m ak a v ariabel cook ie dengan nam a 'username' ak an m enj adi k adaluarsa dan dihapus dari k om put er client oleh w eb br ow ser.
2 .3 Pa ge Re dir e ct ion
Session dan cook ie bany ak dim anfaat k an unt uk m em fasilit asi proses login, dim ana pengguna y ang t elah diot ent ik asi ( t elah login) dapat m engak ses halam an- halam an t ert ent u y ang sifat ny a t idak t erbuk a oleh um um . At au j ik a pengguna m em ak sa unt uk m engak ses halam an y ang t idak dapat digunak an sebelum diot ent ik asi t erlebih dahulu, m ak a pengguna t ersebut ak an dialihk an k e halam an login unt uk diot ent ik asi.
Page redirect ion secara sederhana dapat dilak uk an dengan fungsi PHP header()berik ut : <?php
$url_tujuan = "http://google.com"; header("Location: " . $url_tujuan); exit;
?>
Proses login secara sederhana dapat digam bark an dengan langk ah- langk ah berik ut :
1. Penguna m em asuk k an usernam e dan/ at au passw ord- ny a pada halam an login y ang disediak an. Halam an login t ersebut sederhanany a adalah sebuah dok um en HTML y ang berisi for m y ang dapat digunak an unt uk m enerim a m asuk an usernam e dan passw ord dari pengguna dan k em udian m engirim k anny a pada serv er unt uk diot ent ik asi. Berik ut ini adalah cont oh halam an HTML y ang berisi form unt uk m enerim a m asuk an dari pengguna dan dik irim k an k e halam an aut hent icat e.php unt uk diot ent ikasi. Dok um en HTML berik ut disim pan dalam nam a file: login.php.
<!DOCTYPE html> <html> <body>
<form name="login" action="authenticate.php" method="post"> Username: <input type="text" name="username" /><br /> Password: <input type="password" name="password" /><br /> <input type="submit" value="Login" />
</form> Ca t a t a n
Fungsi setcookie() t idak m em ber ik an j am inan bahw a cook ie y ang dibuat oleh fungsi t ersebut ak an berhasil dibuat . Ter ut am a j ik a w eb brow ser y ang digunak an oleh client m enolak unt uk m enerim a cook ie, dengan k at a lain, m enon- ak t ifk an fit ur cook ie. Fungsi setcookie() hany a m encoba unt uk m engirim k an inform asi header unt uk m eny im pan cook ie pada k om put er client , selanj ut ny a diserahk an pada k om put er client unt uk m enerim a at au m enolak cook ie y ang diberik an oleh w eb serv er.
Dengan dem ik ian nilai boolean y ang dihasilk an oleh fungsi setcookie() t idak m eny at ak an bahw a cook ie y ang dik irim k an oleh serv er dit erim a at au dit olak oleh k om put er client .
(4)
</body> </html>
Met hod y ang digunak an pada form t ersebut di at as adalah POST, sehingga usernam e dan passw ord y ang dim asuk k an oleh user t idak ak an dit am pilk an pada query st ring di alam at URL.
2. Halam an ot ent ik asi m enerim a usernam e dan passw ord y ang dim asuk k an oleh pengguna m elalui form pada t ahap sebelum ny a. Jik a ot ent ik asi berhasil dilak uk an, m ak a serv er ak an m em buat v ariabel session at au cook ie y ang m engindik asik an bahw a proses ot ent ik asi berhasil dilak uk an, m isalny a dengan k ode PHP berik ut :
<?php // filename: authenticate.php session_start();
// buffer output, sehingga error yang mungkin muncul // tidak mengganggu proses redirect dengan fungsi header() // jika output muncul sebelum fungsi header dijalankan, // maka proses redirect akan gagal.
ob_start();
function correct($user, $pass) {
if( $user == "admin" && $pass == "rahasia" ) return true;
else return false; }
if( correct($_POST['username'], $_POST['$password']) ) $_SESSION['logged_in'] = true;
header("Location: secret.php"); else {
header("Location: login.php"); exit;
} ?>
3. Set elah pengguna berhasil diot ent ikasi m elalui pr oses pada t ahap 2, m ak a pengguna ak an dialihk an ke halam an " secret .php" . Halam an ini bert ugas unt uk m em erik sa v ariabel session y ang disim pan. Jik a v ariabel session logged_in dit em uk an dan bernilai true, m ak a halam an secret .php ak an m enam pilk an suat u pesan y ang m engindik asik an pengguna t ersebut berhasil login, nam un j ik a t idak dit em uk an dan t idak bernilai t rue, m ak a alihk an kem bali user k e halam an login. Berik ut ini adalah cont oh k ode PHP unt uk halam an " secret .php" :
<?php // filename: secret.php
// inisialisasi session, karena status otentikasi disimpan dalam session session_start();
if(isset($_SESSION[]) && $_SESSION[] == true) { echo "Selamat Anda berhasil login!";
(5)
header("Location: login.php"); exit; }
(6)
REFEREN SI
Vasw ani, Vik ram . 2005. How t o do Ev ery t hing w it h PHP & My SQL. McGraw - Hill/ Osborne. New York
Suehring, St ev e, Conv erce, Tim ; Park , Joy ce; 2009. PHP6 and My SQL 6 Bible. Wiley Publishing, I nc., I ndianapolis, I ndian a
Beighley , Lynn; Morrison, Michael. 2009. Head First PHP and My SQL. O'Reilly Media, I nc. USA.
PROPAGASI
A. La t ih a n da n D isk u si ( Pr opa ga si V e r t ik a l da n H or iz on t a l)
1. Buat lah sebuah script PHP y ang dapat digunak an unt uk m engak om odasi k ebut uhan unt uk login sepert i y ang t elah dicont ohk an dalam sub- bab Page Redirect ion, nam un m enggunak an cook ie sebagai t em pat unt uk m eny im pan inform asi st at us login pengguna.
B. Tu ga s ( Ev a lu a si m a n dir i)
1. Jelask an apa y ang dim ak sud dengan session, cook ie, dan HTTP header?
2. Mengapa page redirect ion dapat dilak uk an dengan m enggunak an fungsi header( ) y ang dim ilik i oleh PHP?
3. Mengapa k it a t idak disarank an unt uk m eny im pan passw ord pengguna k e dalam v ariabel cook ie? Bagaim ana j ik a passw ord t ersebut disim pan dalam session? Jelask an!
C. Pe n ga y a a n Kom pe t e n si ( Ev a lua si m a n dir i)
1. Buat lah sebuah halam an w eb y ang dapat m enam pilk an seluruh pengguna y ang sedang online ( t elah login) dalam k urun w ak t u 24 j am t erak hir besert a k apan w ak t u t erak hir pengguna t ersebut berhasil login.
2. Buat lah sebuah program k eranj ang belanj a sederhana unt uk t ok o online, dim ana pengguna bisa m em asuk k an daft ar barang belanj aan y ang dibeliny a k e dalam k eranj ang belanj a besert a j um lahny a unt uk dit am pilk an dalam pr oses check out . Cont oh w ebsit e t ok o online y ang m em ilik i fit ur aplik asi k eranj ang belanj a:
• Bhinnek a ( ht t p: / / bhinnek a.com ) • Cam era ( ht t p: / / cam era.co.id) • Am azon ( ht t p: / / am azon.com )