07_Session dan Cookie

(1)

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 )