Apa itu Session Pada PHP
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 dibuatsess_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 perintahsession_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 (k
omputer saya), jika kita buka direktori tersebut, disana kita temukan banyak file .tmp, cari nama dengan awalan sess_ , file tersebut merupakan 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: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 filesess_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 sessionsess_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:
- 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 perintahsession_start(),
maka ketika menjalankan file b.php browser akan mengirimkan ID Session, sehinggas
ession yang terbentuk ketika menjalankan file a.php akan dipakai lagi ketika kita menjalankan file b.php), - 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.
Subscibe Now
Suka dengan artikel di Jagowebdev.com? jangan sampai ketinggalan, segera join ke milis kami untuk update informasi terbaru dari Jagowebdev.com
30 Feedback dari pembaca
Mas, ada tutorial cara myimpan session di dalam database?
Belum ada mas, belum sempat menulis tema tersebut…
Mas agus,link ke artikel ttg keamanan session dimana?
Maaf belum ada mas
Artikelnya menarik saran saya di tambahkan untuk update session (value)
Terima kasih mas…
Mas, saya punya script login.php menggunakan session dan sesaion is registered, untuk merubah ke versi php terbaru ada tutorialnya, saya baca di manual dan googling berbeda beda, dan script tidak jalan. File login tersebut require file php lain check.php dan configsis.php
Tidak jalannya kenapa mas? Karena error atau sebab lain?
mas kalau produk,harga,dan qty dipanggil dari database gimana ya?
Maksudnya bagaimana ya mas?
apakah session harus reload dulu , atau tidak reload pun bisa ?
Refresh halaman mas…
Terimakasih ,izin dijadikan referensi
Sama sama mas…
mohon bantuannya pak kenapa saya menggunakan script ini kok masih muncul error
if ($_COOKIE[‘USERNAME’] == ” && $_COOKIE[‘PASSWORD’] == ”)
{
echo “Mohon Untuk Login”;
exit();
}
// skrip koneksi database
include ” “.php”;
Error nya bagaimana mas?
Mas, mau tanya, kalau Session itu bisa berubah sendiri saat pindah halaman, bagaimana cara atasinya ya ?
Engga mas, session tetep sama, di browser yang sama
Code saya (pake session utk login) jalan bagus di win xp/7 (xampp).
Pas diupload ke rumahweb kok gagal
Warning: session_start(): Cannot start session when headers already sent in /home/jurr4567/public_html/infomhs/login.php on line 2
Warning: Cannot modify header information – headers already sent by (output started at /home/jurr4567/public_html/infomhs/index.php:1) in /home/jurr4537/public_html/infomhs/utama/form_login.phpon line 9
session_start() diletakkan di paling awal mas, sebelum ada output seperti echo, dll
mas mau tanya cara mengatasi PHPSSID berubah ubah gmna ya ?
apa ada cara mengambil otomatis Value PHPSSID dari headers ?
PHPSESSID biasanya berubah setelah periode tertentu mas. Untuk mengubahnya bisa menggunakan fungsi session_regenerate_id()
Di headers biasanya berada di bagian headers. Untuk melihat semua data session, termasuk session ID, bisa mencoba menggunakan perintah print_r($_SESSION)
Mas, kalau menggunakan include beberapa buah file, dan disetiap file menggunakan SESSION, Agar session dapat digunakan dan diakses, maka gimana mas?
Jalankan fungsi session_start() dipaling awal halaman mas… selanjutnya variable $_SESSION bisa dipakai dimana saja
Parse error: syntax error, unexpected ‘echo’ (T_ECHO) in C:\xampp\htdocs\Membuat_session\register.php on line 50
apa beda php5 ama php7 ?
Beberapa ada yang beda mas, seperti penggunaan short tag dimana di PHP7 sudah di disable, melainkan harus menggunakan
mas ketika saya pke session_start di php ko internal servernya error ya , mohon solusinya mas
Errornya kenapa ya mas?
bagimana cara menghapus sesi berdasarkan variabel session nya ? saya ada kendala , saya mau membuat session alert notifikasi tambah data,
tetapi saya sudah pakai session untuk akses halaman login dan halaman lain nya. jadi ketika saya destroy , session login pun ikut terhapus. bagaimana ya solusi nya ? agar kedua session tidak bentrok
terima kasih
Kalau pakai session_destroy semua terhapus mas, session seperti array biasa, untuk melihat semua data session bisa dicoba print_r($_SESSION) selanjutnya untuk menghapus data session tertentu bisa dihapus data berdasarkan key nya menggunakan unset, misal: unset($_SESSION[‘data_tertentu’]);