Sepintas Tentang Session
Saat berinternet, kita tentu sering menjumpai situs yang mengharuskan pengunjung melakukan login terlebih dahulu agar dapat mengakses informasi mereka. Misalnya saja pada situs e-mail, disitu kita perlu mengisikan user name dan password sebelum mengakses email, kemudian melakukan logout setelah selesai. Pada PHP terdapat fitur bernama session handling yang bisa dipakai untuk keperluan otentikasi seperti di atas. Pada dasarnya session adalah cara untuk menjaga suatu variabel tetap ada selama sesi kunjungan user. Meskipun berpindah-pindah halaman, variabel session tetap ada dan bisa diakses sampai session ditutup. Fasilitas session handling ini baru ada secara built-in mulai PHP versi 4.
PHP mempunyai session (catatan aktivitas) yang digunakan untuk menjaga / memelihara informasi akses dari seorang pengakses / pemakai aplikasi web. Session memungkinkan pelacakan akses pemakai, pangaturan pemakaian aplikasi oleh pemakai dan meningkatkan layanan situs web. Setiap pengunjung akan diberi sebuah id yang unik, yang disebut dengan id session (session_id). ID ini dapat disimpan dalam suatu cookie pada sisi user atau disertakan dalam URL. Session koneksi antara klien dan server akan hilang atau putus apabila browser ditutup. Apabila browser dijalankan kembali dan koneksi ke server dilakukan maka dianggap sebagai koneksi baru.
Fungsi-fungsi session :
1. session_start(), untuk memulai session.
session_start — Menginisialisasi data dari session.
Description
bool session_start ( void )
session_start() membuat sebuah session atau melanjutkan session sebelumnya berdasarkan pada pengidentifikasi session via GET atau POST atau cookie
Untuk menggunakan session yang memiliki nama, panggil session_name() sebelum memanggil session_start().
Ketika session.use_trans_sid tersedia, fungsi session_start() akan mendaftarkan sebuah output handler internal untuk merekam ulang URL.
Jika pengguna menggunakan ob_gzhandler atau mirip dengan ob_start(), urutan fungsi sangatlah penting untuk hasil yang sesuai. Sebagai contoh, ob_gzhandler haruslah terdaftar sebelum memulai session.
Return Values
Fungsi ini akan mengembalikan nilai TRUE jika sebuah session berhasil berjalan, dan FALSE jika sebaliknya.
Examples
Example #1 A session example: page1.php
- Mulai session dengan login terlebih dahulu (Script kode login bisa dilihat di lampiran)
session_start();
if ($_SESSION['access']==false) {
echo "Login dulu...";
exit;
}
?>
/*
// page1.php
session_start();
echo 'Welcome to page #1';
$_SESSION['favcolor'] = 'green';
$_SESSION['animal'] = 'cat';
$_SESSION['time'] = time();
// Works if session cookie was accepted
echo '
page 2';
// Or maybe pass along the session id, if needed
echo '
page 2';
?>
logout
//
Setelah menampilkan page1.php, halaman kedua yaitu page2.php akan berisi data dari session.
Example #2 A session example: page2.php
// page2.php
session_start();
echo 'Welcome to page #2
';
echo $_SESSION['favcolor']; // green
echo $_SESSION['animal']; // cat
echo date('Y m d H:i:s', $_SESSION['time']);
// You may want to use SID here, like we did in page1.php
echo '
page 1';
?>
2. session_destroy()
session_destroy — Menghancurkan semua data yang terdaftar dari sebuah session
Description
bool session_destroy ( void )
session_destroy() menghancurkan semua data yang berhubungan dengan session saat ini. Hal ini tidak merubah variabel global yang berhubungan dengan session tersebut, Hal ini juga tidak merubah cookie dari session. Untuk menggunakan lagi variabel sssion tersebut, session_start() haruslah dipanggil.
Untuk membunuh session secara bersamaan, seperti proses log out user, id dari session haruslah dalam keadaan tidak aktif. Jika sebuah cookie digunakan untuk menciptakan session_id (sifat dasar), maka cookie dari session tersebut haruslah dihapus. Dalam hal ini, sintak setcookie() dapat digunakan.
Return Values
Mengembalikan nilai TRUE jika sukses dan FALSE jika gagal.
Examples
Example #1 Menghancurkan sebuah session dengan $_SESSION
- Mulai session dengan login terlebih dahulu (Script kode login bisa dilihat di lampiran)
// 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")) {
$params = session_get_cookie_params();
setcookie(session_name(), '', time() - 42000,
$params["path"], $params["domain"],
$params["secure"], $params["httponly"]
);
}
// Finally, destroy the session.
session_destroy();
?>
3. session_id(), untuk mengambil atau menentukan identitas sebuah session (session
id).
session_id — Mengambil atau mengatur session id saat ini.
Description
string session_id ([ string $id ] )
session_id() digunakan untuk mengambil atau mengatur session id saat ini.
SID yang konstan dapat juga digunakan untuk mengambil nama dari SID saat ini dan session_id dalam bentuk string cocok untk ditambahkan kedalam URL.( lihat juga session handling ).
Parameters
id
Jika id telah dispesifikasi, maka id tersebut akan menggantikan session_id saat ini. Untuk itu, session_id() haruslah dipanggil sebelum session_start(). Tidak semua karakter diperbolehkan untuk menjadi bagian dari session id . Hal ini bergantung pada session handler. Sebagai contoh, session handler hanya memperbolehkan karakter a-z A-Z 0-9 , (koma) dan – (kurang).
Catatan : ketika menggunakan cookie dari session , id yang terspesifikasi untuk session_id() akan selalu mengirimkan sebuah cookie baru ketika session_start() dipanggil, tak peduli jika session id saat ini sama dengan session id yang baru.
Return Values
session_id() mengembalikan session id untuk session saat ini atau strting kosong (“”) jika tidak terdapat session pada saat ini.
Changelog
Version Description
5.0.0 karakter koma (,) dan minus (-) diperbolehkan dalam file dari session handler .
4. session_register(), untuk mendaftarkan variabel ke sebuah session.
session_is_registered — Mengetahui apakah sebuah variabel telah terdaftar atau belum dalam sebuah session.
Description
bool session_is_registered ( string $name )
Mengetahui apakah sebuah variabel telah terdaftar atau belum dalam sebuah session.
Warning
Fungsi ini tidak diperkenankan oleh PHP 5.3.0 dan dihapus pada PHP 6.0.0.
Parameters
name
Nama Variabel.
Return Values
session_is_registered() mengembalikan nilai TRUE jika terdapat variabel global yang memiliki nama name terdaftar pada session saat ini, Jika sebaliknya akan mengembalikan nilai FALSE.
Notes
Catatan: Jika $_SESSION (atau $HTTP_SESSION_VARS untuk PHP 4.0.6 atau kurang) digunakan, gunakan isset() untuk mengecek variabel yang terdaftar dalam $_SESSION.
Caution
Jika menggunakan $_SESSION (or $HTTP_SESSION_VARS), maka jangan gunakan session_register(), session_is_registered() dan session_unregister().
Pertukaran Variabel antar script
Bila suatu variabel didefinisikan secara global pada skrip PHP, maka variabel itu memiliki lingkup hanya sebatas dalam skrip PHP itu saja. Variabel itu tidak dapat diakses dari file PHP lain dengan cara biasa. Bila kita menginginkan variabel yang bisa diakses dari banyak file PHP, kita perlu variabel yang bersifat superglobal.
Untuk itu, variabel harus dipropagasi atau dikirim ke server terlebih dahulu. Ada beberapa cara untuk melakukannya. Pertama, variabel tersebut dikirim secara langsung melalui string yang ditambahkan ke URL, seperti halnya metode GET dalam pengiriman data. Contoh sederhananya pada URL berikut:
utama.php?halaman=1&userid=100
URL ini akan menuju ke file utama.php dan pada utama.php akan terdapat variabel $halaman yang bernilai 1 dan variabel $userid bernilai 100.
Cara lain yaitu menggunakan cookies. Cookies adalah mekanisme penyimpanan data atau variabel di sisi klien (browser). Dengan menyimpan variabel sebagai cookie, data tersebut akan tetap ada sampai waktu kadaluarsa yang bisa ditentukan. Cookie biasa dipakai di situs-situs untuk mengidentifikasi pengunjung yang mengakses situs mereka. Misalnya pada aplikasi polling, dimana satu pengunjung hanya bisa melakukan vote satu kali dalam sehari.
Session Handling di PHP
Contoh, misalkan kita akan meregister variabel bernama userid
session_register(“userid”);
Maka untuk mengisi userid dengan nilai 100.
$HTTP_SESSION_VARS["userid"] = 100;
Atau
$_SESSION[“userid”] = 100;
Bisa juga dengan cara yang lebih sederhana:
$userid = 100;
Cara yang terakhir bisa dilakukan bila option register_globals bernilai on (pada file konfigurasi php.ini). Dengan begitu userid tersedia sebagai variabel global $userid dan dapat diakses langsung. Pada PHP versi 4.2 ke atas, biasanya option ini dinonaktifkan dengan alasan keamanan. Setiap skrip yang ingin memakai variabel session, harus memulai session dahulu dengan fungsi session_start() yang dipanggil di awal skrip sebagai header.
session_unregister()
Digunakan untuk mengunregister variabel dari suatu session.
session_destroy()
Menghancurkan semua variabel yang berhubungan dengan session.
Cara kerja Session:
Berikut ini adalah gambaran mengenai cara kerja session:
Saat pengunjung mengakses suatu halaman, pengunjung tersebut memulai session (digunakan fungsi session_start()). Bila dalam konfigurasi php, session.auto_start diset ke 1 maka php akan melakukan start session secara otomatis.
Pengunjung tadi kemudian diberi pengenal berupa session id, Session id ini adalah rangkaian karakter yang unik, misalnya 12345678xx.. Bersamaan dengan itu, pada sisi server juga dibuat file ses_12345678xx yang berisi variabel-variabel session milik si pengunjung. Variabel yang diregister dengan fungsi session_register() akan disimpan dalam file ini.
Metode di atas adalah default. Sebenarnya anda juga bisa menentukan lokasi penampungan variabel session anda sendiri, misalnya di database. Selanjutnya, saat pengunjung memulai atau melanjutkan session (melalui session_start()) maka dia tinggal mengirim session id-nya untuk memperoleh kembali variabel-variabel session miliknya yang telah disimpan di server.
Pengiriman session id ke server bisa melalui 2 cara. Yang pertama, yaitu cara default, dikirim melalui cookies. Session id berupa cookie PHPSESSID (default).
Ada kalanya dengan alasan tertentu, si pengunjung menonaktifkan cookies (bisa dilakukan melalui setting browsernya). Bila hal ini terjadi, maka pengiriman session id dilakukan dengan cara kedua, yaitu melalui query string (string yang ditambahkan ke URL, seperti contoh di awal artikel).
Session akan berakhir saat fungsi session_destroy() dipanggil atau sewaktu user menutup web browsernya.
Dari cara kerja session tadi, terlihat bahwa yang menjadi kunci pegangan si pengunjung (di sisi client) hanyalah variabel session id, sedangkan variabel-variabel lain miliknya di server. Adanya fasilitas session handling di PHP menjadikan proses diatas menjadi sederhana dan mudah karena PHP melakukannya otomatis untuk anda.
Contoh aplikasi login sederhana.
Dengan menggunakan fungsi2 session, kita bisa membangun suatu mekanisme login.
Skenarionya begini: Pengunjung mengakses halaman utama index.php, disana dia disodori form user dan password untuk login. Ia harus memasukkan username dan password yang valid agar dapat mengakses informasi utama di situs ini. Kemudian setelah selesai, disediakan link untuk logout.
Untuk itu kita membutuhkan satu tabel database untuk menampung data user yang terdaftar. Dalam contoh ini dipilih MySQL karena telah umum dipakai serta gratis.
Pertama-tama kita siapkan dahulu sebuah database bernama session dan tabel bernama user dengan struktur berikut:
CREATE DATABASE session;
CREATE TABLE user
(us_id int(10) AUTO_INCREMENT PRIMARY KEY,
us_nama varchar(32),
us_email varchar(50),
us_angkatan varchar(4),
us_url varchar(100),
us_password varchar(32)
)
Kemudian isilah tabel hingga setidaknya berisi satu user, misalnya.
INSERT INTO user (us_id,us_nama,us_email,us_angkatan,us_url,us_password)
VALUES (1,’Sarifah’,’Sarifahriz@operamail.com’,’2002’,’http://Sarifahriz.cjb.net’,’passwordku’);
index.php
1 2
3 session_start();
4
5 echo "selamat datang";
6
7 if (!session_is_registered("status"))
8 { session_register("userid");
9 $userid = "";
10 session_register("status");
11 $status =0;
12 }
13
14 if ($status != "1")
15 {?>
20 21 else
22 { // get data user dari database
23 mysql_connect("localhost","root","") or die("koneksi ke mysql gagal");
24 mysql_select_db("session") or die("selek database gagal");
25
26 $get_datauser = mysql_query("SELECT * FROM user WHERE us_id=$userid") or die("");
27 if ($row = mysql_fetch_array($get_datauser) or die(""))
28 { $u_nama = $row[us_nama];
29 $u_email = $row[us_email];
30 $u_angkatan = $row[us_angkatan];
31 $u_url = $row[us_url];
32 }
33 // tampilkan konten disini
34 print "
Anda login sebagai $u_nama, angkatan $u_angkatan dengan email $u_email
35
logout";
36 }
37 ?>
Pada skrip ini variabel session yang dipakai adalah userid dan status. Bila belum login, maka nilai status=0, sedangkan bila sudah login, maka status=1. Saat pengunjung berhasil login, userid akan diberi nilai sama dengan user id yang disimpan di database. Jika tidak, maka userid kita biarkan kosong.Pertama-tama skrip memulai suatu session dengan dipanggilnya fungsi session_start(), selanjutnya pada baris 7 akan dicek apakah variabel userid dan status telah diregister. Jika belum, maka lakukan register.
Kemudian pada baris 14 dilakukan pengecekan status. Bila status=0, berarti user belum login, maka form login dicetak, sebaliknya jika status=1, informasi utama akan ditampilkan.
login.php
1 2 mysql_connect("localhost","root","") or die("koneksi ke mysql gagal");
3 mysql_select_db("session") or die("selek database gagal");
4
5 $namaid = addslashes($namaid);
6
7
8 $cheklogin = mysql_query("SELECT us_id FROM user WHERE (us_nama = '$namaid') AND (us_password = '$passwd')") or die(mysql_error());
9
10 if (!mysql_num_rows($cheklogin))
11 { print "Anda tidak terdaftar, silakan register dulu";
12 }
13 else
14 { session_start();
15
16 // set user id
17 if ($row = mysql_fetch_array($cheklogin) or die(""))
18 { $userid = $row[us_id];
19 }
20
21 $status = "1"; // set status login = 1
22 header("location:index.php"); // ke halaman index
23 }
24 ?>
Pada baris 8 dilakukan pengecekan username dan password dalam database. Jika cocok, maka nilai status=1, sedangkan userid=user id yang sesuai dalam database. Perhatikan bahwa session_start(); juga dipanggil di awal, hal ini supaya skrip ini bisa mengenali $userid dan $status sebagai variabel session.
Selanjutnya, pengunjung dikembalikan ke halaman index.php untuk disuguhi informasi.
logout.php
1 2 session_start();
3 {
4 $userid = "";
5 $status = "0";
6 print "berhasil logout
7
kembali ke halaman utama";
8 }
9 ?>
Dalam proses logout, pada baris 3, variabel userid dan status akan dikosongkan, sehingga pengunjung kembali dalam keadaan belum login.
untk penulisan script session itu diletakan dimana y ?
ReplyDelete#newbie
makasih gan
ReplyDeleteWeb Murah dengan cloud hosting
thanks gan
ReplyDeletemakasih ini ilmunya sedep banget
ReplyDeleteluar biasa ini mengena banget psotingan
ReplyDeletesaya senang banget bisa nemu blog ini
ReplyDeletedasyat dan luar biasa penulisnya
ReplyDeletesemoga tambah produktif nulisnya ya
ReplyDeletemantap gan...
ReplyDeletewww.lianalin.id
Nice information min
ReplyDeletepemotong simcard