Memahami Session Pada PHP dan Penggunaannya

Memahami Session Pada PHP dan Penggunaannya

Dalam PHP, session merupakan data yang disimpan dalam suatu server yang dapat digunakan secara global di server tersebut, dimana data tersebut spesifik merujuk ke user/client tertentu, contoh penggunaan session adalah ketika user telah login di halaman tertentu, maka ketika membuka halaman lain, php akan mengingat bahwa user tersebut telah login, contoh ketika kita telah login pada Google, maka setiap kali kita membuka layanan Google seperti GMail, Google Drive, dll di tab berbeda, kita akan selalu dalam keadaan login, kecuali kita buka dengan browser yang berbeda. Cntoh lain ketika web ecommerce merekam keranjang belanja user, maka ketika pindah ke halaman pembayaran, daftar belanja masih terekam.
I. Cara Kerja Session Pada PHP
Ketika kita memulai session dengan menjalankan perintah session_start() maka PHP akan menjalankan perintah baik pada server maupun pada client/user.
Sisi Server
Dari sisi server php akan membuat file yang kita sebut file session yang diawali dengan sess_ dan diikuti dengan ID session, dimana ID Session tersebut mereferensikan id session yang ada di browser client. nilai ID session adalah:
  • Jika browser mengijinkan penggunaan cookie, maka ID session berupa angka acak sebanya 26 karakter hexadesimal, contoh: 1g7vcm79tg4869tp8u53gldl02
  • Jika browser tidak mengijinkan penggunaan cookie
    Jika nama session ada di url, maka nilai ID Session sama dengan id yang ada di url, misal https://jagowebdev.com?page=login&PHPSESSID=1234, maka ID Session yang digunakan adalah 1234, sehingga nama file session yang dibuat sess_1234, Namun jika ID Session tidak ada di URL, maka PHP akan membuat file dengan ID Session sama seperti sebelumnya yaitu 26 karakter hexadesimal, file ini akan dibuat setiap kali perintah session_start() dijalankan, dan tidak ada referensi ke user/client.
Terus dimana php menyimpan file session tersebut? file tersebut secara default disimpan didalam direktori temporary dimana letak direktory ini tergantung dari masing-masing sistem opersi yang digunakan. untuk mengetahui dimana php menyimpan file session, dapat menggunakan perintah: session_save_path() Misal kita buat file session.php dan simpan ke dalam htdocs/tutorial, selanjutnya tuliskan kode berikut:
<?php echo session_save_path(); ?>
Ketika kita jalankan file tersebut di komputer yang menggunakan sistem operasi windows, contoh output yang dihasilkan adalah E:\xampp-1.8.3.2\tmp (komputer saya), jika kita buka direktori tersebut, disana kita temukan banyak file .tmp, cari nama dengan awalan sess_ , file tersebut merupakan file session.
file_session_pada_php
Gambar 1. Contoh File Session
Sisi User/Client
Selanjutnya dari sisi client/user, php akan:
  • Jika browser mengijinkan penggunaan cookie
    Membuat file cookie dengan nama default yaitu  PHPSESSID dengan nilai (value) ID session, lokasi penyimpanan file tersebut berbeda beda tergantung jenis browser yang digunakan, untuk google chrome lokasi cookie berada di:C:\Users\<NAMA USER>\AppData\Local\Google\Chrome\User Data\Default dengan nama file Cookie, namun kita tidak dapat membukanya secara langsung, melainkan harus menggunakan SQLite, kita dapat membaca isinya melalui Chrome Developer Tools, yaitu pada tab Resources bagian Cookies, contoh seperti gambar berikut:
    browser_session_pada_php
    Gambar 2. Cookie PHPSESSID
    Jika kita bandingkan antara gambar 1 dan 2 terdapat kesamaan nilai yaitu 1g7vcm79tg4869tp8u53gldl02 yang merupakan ID Session, dengan ID ini, maka setiap kali user mengunjungi situs yang sama dan dengan browser yang sama, maka server akan selalu menggunakan data-data yang ada di file sess_1g7vcm79tg4869tp8u53gldl02.
  • Jika browser tidak mengijinkan penggunaan cookie
    Jika nama session berada di url, maka PHP akan membuat referensi ID Session sesuai dengan yang ada di URL. Misal: https://jagowebdev.com?page=login&PHPSESSID=1234, maka php akan menggunakan data session pada file session sess_1234 . Jika ID session tidak ada di URL maka data session hanya dapat digunakan di halaman tersebut saja.
Isi File Session Pada PHP
Isi file session pada PHP berupa array yang di serialize nilainya akan berubah ubah sesuai dengan manipulasi data yang kita lakukan, misal file session.php kita ubah menjadi:
<?php
echo session_save_path();
session_start();
$_SESSION['user'] = 'agusph';
$_SESSION['auth'] = 1;
ketika kita jalankan PHP akan menyimpan data session dengan key dan value sesuai dengan yang kita tentukan, jika kita buka file session tadi menggunakan notepad, maka akan berisi user|s:6:"agusph";auth|b:1;, format: nama key diikuti tanda | kemudian data yang di serialize (tipe data : panjang data(jika ada) : nilai data) dengan tanda pemisah antara data satu dengan yang lain menggunakan  titik koma. contoh diatas berarti bahwa s merupakan tipe data string, 6 panjang data, sedangkan b berarti tipe data boelan.
Session selesai
Ketika browser ditutup atau kita menjalankan perintah session_destroy() maka session berakhir, jika kita menggunakan session_destroy() maka file session yang ada pada server akan lansung terhapus, namun jika browser ditutup, file tersebut tidak langsung dihapus, server akan menghapusnya pada periode tertentu, biasanya 30 menit. Ketika browser ditutup, cookie session pada browser akan langsung terhapus, sehingga session tersebut tidak dapat digunakan lagi kecuali jika kita mengetahui ID Session nya, maka data session tersebut dapat digunakan kembali baik melalui url maupun cookie.
II. Mengawali/Menjalankan Session Pada PHP
Untuk mengawali menjalankan session, seperti pada tulisan diatas, kita gunakan perintah session_start() yang akan memberitahu server bahwa kita akan menggunakan session, selanjutnya server akan mengecek apakah pengunjung telah memiliki session ID:
  1. jika ya, maka server akan mengambil data sesuai dengan ID session yang di minta oleh browser (misal di file a.php kita telah menjalankan perintah session_start() kemudian di file b.php kita jalankan lagi perintah session_start(), maka ketika menjalankan file b.php browser akan mengirimkan ID Session, sehingga data session yang terbentuk ketika menjalankan file a.php akan dipakai lagi ketika kita menjalankan file b.php),
  2. jika tidak, maka server akan membuat file session dengan nama sess_ID dan mengirimkan id tersebut ke browser untuk dibuatkan cookie.
Karena penggunaan data session harus didahului dengan perintah session_start() maka perintah ini sebaiknya ditulis di baris paling awal di program kita.
III. Menambahkan Data Session Pada PHP
Semua data session disimpan dalam bentuk array superglobal dengan nama $_SESSION, sehingga seperti array pada umumnya setiap variabel session disimpan dalam hubungan key dan value, untuk menambahkan data kedalamnya sama dengan ketika kita menambahkan data di array biasa, namun bedanya variabel $_SESSION akan tetap dapat kita gunakan di file php manapun (dalam satu server) hingga kita menakhirinya dengan perintah session_destroy()
Contoh untuk menambahkan data session:
<?php
session_start();
$_SESSION['user'] = 'agusph';
$_SESSION['role'] = 'admin';
$_SESSION['login_time'] = date('Y-m-d');
print_r($_SESSION);

/*
Output
Array
(
    [user] => agusph
    [role] => admin
    [login_time] => 2015-09-05
)
*/
IV. Membaca Data Session Pada PHP
Setelah kita menyimpan data pada session, data tersebut langsung dapat kita gunakan, untuk memanggil  data session pada PHP, seperti kita memanggil data pada array pada umumnya, yaitu dengan key nya, contoh:
<?php
    $_SESSION['user'] = 'agusph';
    echo $_SESSION['user']; // agusph
?>
Session yang telah kita isi datanya dapat langsung kita gunakan sehingga lebih banyak keuntungannya dibanding menggunakan $_COOKIE.
V. Menghapus Data Session Pada PHP
Untuk menghapus data session pada php, sama seperti ketika kita menghapus variabel, yaitu menggunakan perintah unset() contoh berikut menyambung contoh sebelumnya:
<?php
unset($_SESSION['user']);
print_r($_SESSION);

/*
Output
Array
(
    [role] => admin
    [login_time] => 2015-09-05
)
*/
disamping itu kit juga dapat menggunakan perintah session_unset() untuk menghapus semua data pada $_SESSION, contoh:
<?php
session_start();
$_SESSION['user'] = 'agusph';
$_SESSION['role'] = 'Admin';
session_unset();
print_r($_SESSION);

/*
Output
Array ()
*/
perlu diperhatikan bahwa jika menggunakan perintah unset() untuk menghapus data session, pilihlah data secara spesifik, jangan menghapus $_SESSION itu sendiri (unset($_SESSION)), karena akan menghapus semua isi data session, dan menghapus variabel $_SESSION itu sendiri, sehingga jika kita panggil akan memunculkan pesan error bahwa variabel $_SESSION undefined. contoh:
<?php
session_start();
$_SESSION['user'] = 'agusph';
$_SESSION['role'] = 'admin';
$_SESSION['login_time'] = date('Y-m-d');
unset($_SESSION);
print_r($_SESSION);

// Notice: Undefined variable: _SESSION in E:\xampp-1.8.3.2\htdocs\tutorial\session.php on line 7
VI. Mengakhiri Session Pada PHP
Untuk mengakhiri session pada PHP, kita gunakan perintah session_destroy(), dengan perintah ini maka file session akan dihapus dari server. contohnya ketika user logout, maka session akan berakhir dan user diminta untuk login kembali.
VII. Keamanan Session Pada PHP
Dari berbagai manfaat session terdapat beberapa kelemahan yang bisa menyebabkan kerugian terutama pada user, yaitu bocornya data-data sensitif ke pihak yang tidak bertanggung jawab.  Untuk membahas mengenai keamanan session dan bagaimana mencegahnya, dapat dibaca pada artike berikutnya.
Demikian pembahasan kita mengenai session pada PHP, semoga bermanfaat.

Komentar

Postingan populer dari blog ini

Login, Session, dan Logout

Cara Membuat File Setup / Installer Aplikasi Sendiri dengan Inno Setup Compiler