Pada waktu kita browsing menjelajahi website, misalnya e-mail, kita akan diminta memasukkan username dan password. Prosedur ini hanya dilakukan sekali pada awal proses. Selanjutnya sistem akan 'mengingat' identitas kita, dan menampilkan informasi yang sesuai. Tanpa adanya session, sistem akan salah dan menampilkan data rahasia ke orang yang salah.
A. No Session
Untuk mengetahui kegunaan session, kita akan membuat aplikasi tanpa session. Kita membutuhkan satu halaman web dan tiga script php : login.htm, loginNoSession.php, welcomeNoSession.php dan displayNoSession.php
login.htm
<html>
<head>
<title>Login</title>
</head>
<body>
<h1>Login </h1>
<form method="POST" action="loginNoSession.php">
<table border="1" width="44%">
<tr>
<td width="27%">user : </td>
<td width="73%"><input type="text" name="login" size="20"></td>
</tr>
<tr>
<td width="27%">password : </td>
<td width="73%"><input type="text" name="pass" size="20"></td>
</tr>
<tr>
<td width="27%"> </td>
<td width="73%"><input type="submit" value="Submit" name="B1"><input type="reset" value="Reset" name="B2"></td>
</tr>
</table>
</form>
<p><a href="register.htm">Daftar</a></p>
</body>
</html>
loginNoSession.php
<?
// -- cek user dan password -- //
if($login == "endy" && $pass =="test"){
header("Location: welcomeNoSession.php?user=endy"); }elseif($login == "oky" && $pass =="coba"){ header("Location: welcomeNoSession.php?user=oky");
}else{
echo("User dan password salah");
}
?>
welcomeNoSession.php
<?
echo("Welcome $user <br>");
echo("<a href=\"displayNoSession.php?user=$user\">"); echo("klik di sini untuk mengakses daftar kenalan anda</a>");
?>
displayNoSession.php
<?
$dbUser = "endy";
$dbPass = "test";
$db = "latihan";
$server = "localhost";
// membuat koneksi
$koneksi = mysql_connect($server, $dbUser, $dbPass);
// memeriksa koneksi if(!$koneksi){
echo("Koneksi ke database gagal"); exit;
}
// membuka database mysql_select_db($db);
// membuat query dan mengakses hasil
$query = "SELECT * FROM UserData WHERE user='$user'";
$hasil = mysql_query($query);
// menampilkan hasil echo("<table border=1>"); echo("<tr>");
echo("<td>NamaTeman</td>"); echo("<td>Keterangan</td>"); echo("</tr>");
while($row = mysql_fetch_array($hasil)){ echo("<tr>");
echo("<td>".$row["namaTeman"]."</td>"); echo("<td>".$row["keterangan"]."</td>"); echo("</tr>");
}
echo("</table>");
?>
kode ini membutuhkan data contact yang diambil dari tabel UserData dengan definisi sebagai berikut:
CREATE TABLE userData ( user VARCHAR(50), namaTeman VARCHAR(50), keterangan VARCHAR(50)
);
dan sampel data sebagai berikut:
INSERT INTO userData VALUES (
'endy',
'Imanudin',
'Teman ceting'
);
INSERT INTO userData VALUES (
'oky',
'Iswahyudi',
'Pak Lurah kos adhyaksa'
);
INSERT INTO userData VALUES (
'oky',
'Anton Raharja',
'Rekan kerja di kantor'
);
INSERT INTO userData VALUES (
'endy',
'Widya Andhini',
'Gebetan lama tapi masih mesra'
);
Jalannya aplikasi :
login dengan user = oky dan password = coba


klik link untuk mendisplay output, tampilan akan muncul sebagai berikut:

Sekarang, kita akan "memalsu" link yang ada di address bar untuk menampilkan data user endy. Buka browser baru dan masukkan link berikut di address bar:
http://localhost/latihan/displayNoSession.php?user=endy
Kemudian tekan enter.

Ooopss… dengan mudah data rahasia akan muncul. Cara mencegah hal ini terjadi adalah dengan meminta user untuk memasukkan login dan password setiap kali ia berpindah halaman. Tetapi tentu saja cara ini menjengkelkan bagi user. Selain itu, mempassing variabel login dan password di setiap halaman sangat tidak aman dan rentan penyadapan. Oleh karena itulah kita menggunakan session.
B. Konsep session
Session bekerja seperti tempat penitipan barang di supermarket. Kita datang, menitipkan barang bawaan, dan petugas akan memberikan tanda pengenal.
Pada saat kita akan mengambil barang, kita memberikan tanda pada petugas, dan petugas akan dapat mengambil barang yang dititipkan tanpa tertukar dengan barang orang lain.
Permasalahan yang terjadi adalah, bagaimana "tanda pengenal" tersebut akan disimpan pada setiap halaman yang diakses user, sehingga dapat diakses oleh sistem setiap kali user mengklik link.
Ada tiga alternatif yang dapat digunakan untuk menyimpan data session :
- Cookie
- Hidden Form
- URL Embedding
C. Implementasi : Cookie
Cookie adalah informasi yang disimpan pada browser user. Script menjalankan function setcookie yang akan menulis data di harddisk user. Cookie ditulis pada browser user dengan menggunakan perintah :
setcookie("sessionId", "1234");
Setelah itu, variabel $sessionId akan tersedia setiap kali browser user mengakses sistem. Cookie akan hilang dari browser user setelah melewati masa kadaluarsa yang ditentukan atau dihapus melalui perintah:
setcookie("sessionId");
Pendekatan ini banyak mengundang kontroversi. Karena cookie dapat menghilangkan privacy user dan berpotensi mengandung virus. Oleh karena itu, user dapat menonaktifkan cookie melalui setting di browser.
Dengan demikian, pendekatan ini kurang handal untuk diterapkan pada aplikasi kita. Untuk melihat dengan lebih jelas implementasi cookie, kita akan memodifikasi aplikasi di atas sebagai berikut :
login.htm
<form method="POST" action="loginSessionCookie.php">
loginSessionCookie.php
<?
// -- cek user dan password -- // if($login == "endy" && $pass =="test"){ setcookie("user", $login);
header("Location: welcomeSessionCookie.php"); }elseif($login == "oky" && $pass =="coba"){ setcookie("user", $login);
header("Location: welcomeSessionCookie.php");
}else{
echo("User dan password salah");
}
?>
welcomeSessionCookie.php
<? if(!$user){
echo("Illegal Access"); exit; }
echo("Welcome $user <br>");
echo("<a href=\"displaySessionCookie.php\">"); echo("klik di sini untuk mengakses daftar kenalan anda</a>");
?>
tambahkan baris berikut pada bagian atas displayNoSession.php dan save as displaySessionCookie.php
if(!$user){
echo("Illegal Access");
exit;
}
Untuk mengujinya, buka browser baru dan masukkan link berikut di address bar:
http://localhost/latihan/displaySessionCookie.php
Kemudian tekan enter. Anda akan mendapatkan:

Sekarang, disable cookie dengan cara :
Klik Tools – Internet Options

Klik tab Security dan klik tombol Custom Level

klik disable cookie

coba lagi mengakses halaman contact. Anda akan mendapat Illegal Access.
D. Implementasi : Hidden Form
Cara kedua untuk menyimpan data session adalah dengan menyimpan data tersebut pada hidden input yang ada dalam form. Misalnya dengan menggunakan kode :
<input type="hidden" name="user" value="$user">
cara ini juga tidak dapat dilakukan di segala kondisi, karena ada saat-saat di mana kita tidak dapat menggunakan form.
E. Implementasi : URL Embedding
Cara terakhir yang pasti berhasil adalah dengan "menempelkan" variabel session di link/URL. Misalnya link menuju welcome.php dimodifikasi menjadi welcome.php?sessionId=1234.
Satu-satunya kerugian cara ini adalah, link URL menjadi tidak bisa di'bookmark'. Selain itu, link menjadi tidak indah dipandang mata. Tetapi secara teknis, metode inilah yang paling efektif dan reliable.
F. Implementasi : Session API
Session API PHP menggabungkan teknik cookie dan teknik URL Embedding. Apabila user mengaktifkan cookie, PHP akan menyimpan data session pada cookie. Tetapi apabila cookie di-disable user, PHP akan menyimpan data session pada URL. Mekanisme ini terjadi secara otomatis apabila PHP dicompile dengan option --enable-trans-sid.
Cara penggunaan PHP Session API dapat dilihat pada loginSessionApi.php, welcomeSessionApi.php, dan displaySessionApi.php. Anda dapat memodifikasi setting Internet Explorer untuk melihat bahwa metode ini dapat dijalankan walaupun cookie di-disable. Kita juga tidak dapat mengetik langsung URL.
http://localhost/latihan/displaySessionApi.php
untuk membuka halaman pribadi.
loginSessionApi.php:
<?
// -- cek user dan password -- // if($login == "endy" && $pass =="test"){ session_start(); $user = $login; session_register("user");
header("Location: welcomeSessionApi.php"); }elseif($login == "oky" && $pass =="coba"){ session_start(); $user = $login; session_register("user");
header("Location: welcomeSessionApi.php");
}else{
echo("User dan password salah");
}
?>
welcomeSessionApi.php
<?
session_start();
if(!session_is_registered("user")){ echo("Illegal Access"); exit; }
echo("Welcome $user <br>");
echo("<a href=\"displaySessionApi.php\">"); echo("klik di sini untuk mengakses daftar kenalan anda</a>");
?>
displaySessionApi.php
<? session_start();
if(!session_is_registered("user")){ echo("Illegal Access"); exit;
}
$dbUser = "endy";
$dbPass = "test";
$db = "latihan";
$server = "localhost";
// membuat koneksi
$koneksi = mysql_connect($server, $dbUser, $dbPass);
// memeriksa koneksi if(!$koneksi){
echo("Koneksi ke database gagal"); exit;
}
// membuka database mysql_select_db($db);
// membuat query dan mengakses hasil
$query = "SELECT * FROM UserData WHERE user='$user'";
$hasil = mysql_query($query); echo($sessionId); // menampilkan hasil echo("<table border=1>"); echo("<tr>");
echo("<td>NamaTeman</td>"); echo("<td>Keterangan</td>"); echo("</tr>");
while($row = mysql_fetch_array($hasil)){ echo("<tr>");
echo("<td>".$row["namaTeman"]."</td>"); echo("<td>".$row["keterangan"]."</td>"); echo("</tr>");
}
echo("</table>");
?>