Session dan Cookie
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
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.
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
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();
?>
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.
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
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 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)
?>
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:
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
?>
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 :
</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;
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
// inisialisasi session, karena status otentikasi disimpan dalam session session_start();
if(isset($_SESSION[]) && $_SESSION[] == true) { echo "Selamat Anda berhasil login!";
header("Location: login.php"); exit; }
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: