Beli Modem Wavecom Untuk SMS Gateway. FREE E-book Gammu + FREE Ongkos kirim !!
Ingin Punya Script SMS Gateway dengan PHP + MySQL?

Dapatkan segera phpSMS V3.0, software SMS Gateway multi fungsi berbasis web buatan saya sendiri untuk keperluan Anda.
[Info Lengkap...]

Apa Sih Gunanya Session di PHP?


December 6th, 2008 | by rosihanari | Cetak Artikel Ini Cetak Artikel Ini

Apa sih gunanya session di PHP? Beberapa pengunjung setia blog saya ini menanyakan hal tersebut ke saya baik lewat email, YM atau sekedar komentar di blog ini. Nah… melalui tulisan inilah, saya akan berusaha untuk menjawabnya.

Secara umum, session digunakan untuk menyimpan suatu informasi antar proses request, baik request dalam bentuk POST atau GET. Bingung yah ?? He.. he.. he… OK saya akan ambil contoh untuk menggambarkan hal ini.

Salah satu contoh yang menggambarkan penggunaan session adalah proses login. Dalam hal ini user akan memasukkan usernamenya melalui form login. Setelah login berhasil, user tersebut dihadapkan pada link menu navigasi yang menuju ke beberapa halaman web. Nah… apabila kita ingin username tersebut akan selalu tampil atau tercatat di halaman-halaman web tersebut, maka username tadi haruslah disimpan dalam session.

Untuk memudahkan lagi pemahaman, silakan Anda buat script yang menggambarkan keadaan di atas.

Pertama-tama kita buat form login terlebih dahulu

login.htm

<form method="post" action="submit.php">
Usename <input type=text name="username">
Password <input type="password" name="password">
<input type="submit" name="submit" value="Submit">
</form>

Nah… selanjutnya kita buat script untuk mengolah proses login. Oya, dalam hal ini andaikan password login diabaikan dahulu ya… karena saya akan fokuskan pembahasan ke konsep session, bukan proses loginnya. Dengan arti lain, untuk contoh ini anggap saja proses loginnya sukses. Login dikatakan sukses bila password yang dimasukkan user yang bersangkutan ketika dalam form login sama dengan passwordnya yang tersimpan dalam aplikasi.

submit.php

<?php
$namauser = $_POST['username'];
$password = $_POST['password'];

if (login sukses)
{
echo "<p>Selamat datang ".$namauser."</p>";
echo "<p>Berikut ini menu navigasi Anda</p>";
echo "<p><a href='hal1.php'>Menu 1</a> <a href='hal2.php'>Menu 2</a> <a href='hal3.php'>Menu 3</a></p>";
}

?>

Dari script di atas tampak bahwa username akan muncul atau dikenal di halaman submit.php. Username ini akan ditampilkan di ucapan selamat datang. Mengapa username ini dikenal di halaman ini? Ya… karena halaman submit.php ini merupakan halaman tujuan langsung setelah proses request melalui form login. Selanjutnya perhatikan, bahwa setelah login sukses terdapat 3 link menuju ke suatu halaman tertentu. Harapan kita, di setiap halaman tersebut username akan selalu tercatat dan ditampilkan. OK… kita buat script untuk masing-masing halaman tersebut.

hal1.php

<?php

echo "<h1>Ini halaman pertama</h1>";
echo "<p>Anda login sebagai ".$namauser."</p>";
echo "<p>Berikut ini menu navigasi Anda</p>";
echo "<p><a href='hal1.php'>Menu 1</a> <a href='hal2.php'>Menu 2</a> <a href='hal3.php'>Menu 3</a></p>";

?>

hal2.php

<?php

echo "<h1>Ini halaman kedua</h1>";
echo "<p>Anda login sebagai ".$namauser."</p>";
echo "<p>Berikut ini menu navigasi Anda</p>";
echo "<p><a href='hal1.php'>Menu 1</a> <a href='hal2.php'>Menu 2</a> <a href='hal3.php'>Menu 3</a></p>";

?>

hal3.php

<?php

echo "<h1>Ini halaman ketiga</h1>";
echo "<p>Anda login sebagai ".$namauser."</p>";
echo "<p>Berikut ini menu navigasi Anda</p>";
echo "<p><a href='hal1.php'>Menu 1</a> <a href='hal2.php'>Menu 2</a> <a href='hal3.php'>Menu 3</a></p>";

?>

Nah… Anda perhatikan bahwa dalam ketiga script masing-masing halaman tujuan, username akan ditampilkan dalam statu login. Namun apa yang terjadi bila Anda menuju ke halaman-halaman tersebut? Munculkah username tersebut? Bim… salabim… ternyata username tidak muncul. Sehingga dari contoh ini dapat kita simpulkan bahwa username ini hanya akan dikenal pada proses request pertama (login), setelah itu bila menuju ke halaman-halaman lain pada link (proses request kedua, ketiga dst…) maka username tersebut tidak dikenali lagi. So… gimana donk, supaya username tersebut masih bisa dikenali? Yup… kita bisa menggunakan session untuk menyimpan username tersebut. Kenapa kok istilahnya ‘bisa’, bukannya ‘harus’ ? Ya… karena penggunaan session ini merupakan salah satu cara saja, cara yang lain Anda bisa menggunakan cookies.

OK… jadi kita bisa menggunakan session, lantas caranya bagaimana menyimpan username ini ke dalam session? Caranya adalah memberikan perintah berikut ini:

$_SESSION['namauser'] = $username;

Perintah di atas disisipkan pada script submit.php. Oya.. jangan lupa sebelum perintah tersebut diberikan, session harus dijalankan terlebih dahulu dengan perintah session_start(). Sehingga isi dari script submit.php menjadi seperti ini

submit.php

<?php
session_start();

$namauser = $_POST['username'];
$password = $_POST['password'];

if (login sukses)
{
$_SESSION['namauser'] = $namauser;

echo "<p>Selamat datang ".$namauser."</p>";
echo "<p>Berikut ini menu navigasi Anda</p>";
echo "<p><a href='hal1.php'>Menu 1</a> <a href='hal2.php'>Menu 2</a> <a href='hal3.php'>Menu 3</a></p>";
}

?>

Secara umum, perintah untuk menyimpan nilai ke dalam session adalah sebagai berikut

$_SESSION['nama session'] = value;

Mmm… untuk nama session tidak boleh ada spasi. Kita tidak hanya bisa menyimpan suatu nilai berbentuk tunggal ke dalam session, namun bisa juga nilai berupa array.

Sekarang… bagaimana cara menampilkan nilai yang telah tersimpan dalam session? ya… caranya hanya dengan memanggil sessionnya. Berikut ini contoh untuk menampilkan username yang telah disimpan ke dalam session pada kasus di atas.

submit.php

<?php
session_start();

$namauser = $_POST['username'];
$password = $_POST['password'];

if (login sukses)
{
$_SESSION['namauser'] = $namauser;

echo "<p>Selamat datang ".$_SESSION['namauser']."</p>";
echo "<p>Berikut ini menu navigasi Anda</p>";
echo "<p><a href='hal1.php'>Menu 1</a> <a href='hal2.php'>Menu 2</a> <a href='hal3.php'>Menu 3</a></p>";
}

?>

Jangan lupa untuk menerapkan hal yang sama pada ketiga halaman lain.

hal1.php

<?php
session_start();

echo "<h1>Ini halaman pertama</h1>";
echo "<p>Anda login sebagai ".$_SESSION['namauser']."</p>";
echo "<p>Berikut ini menu navigasi Anda</p>";
echo "<p><a href='hal1.php'>Menu 1</a> <a href='hal2.php'>Menu 2</a> <a href='hal3.php'>Menu 3</a></p>";

?>

hal2.php

<?php
session_start();

echo "<h1>Ini halaman kedua</h1>";
echo "<p>Anda login sebagai ".$_SESSION['namauser']."</p>";
echo "<p>Berikut ini menu navigasi Anda</p>";
echo "<p><a href='hal1.php'>Menu 1</a> <a href='hal2.php'>Menu 2</a> <a href='hal3.php'>Menu 3</a></p>";

?>

hal3.php

<?php
session_start();

echo "<h1>Ini halaman ketiga</h1>";
echo "<p>Anda login sebagai ".$_SESSION['namauser']."</p>";
echo "<p>Berikut ini menu navigasi Anda</p>";
echo "<p><a href='hal1.php'>Menu 1</a> <a href='hal2.php'>Menu 2</a> <a href='hal3.php'>Menu 3</a></p>";

?>

Oya… satu lagi, setiap akan menampilkan nilai session perintah session_start() harus diberikan terlebih dahulu. Perhatikan pada script di atas untuk melihat hal ini!

Setelah menggunakan session, dapat Anda lihat bahwa username ini akan selalu tampak pada setiap halaman yang ada.

Nah… mungkin ada pertanyaan lain. Bagaimana cara menghapus nilai session yang telah tersimpan? Nilai session ini akan terhapus otomatis begitu browser ditutup atau keluar dari browser. Cara lain adalah dengan menggunakan perintah session_destroy() atau unset($_SESSION['nama session']). Bedanya apa antara kedua perintah tersebut? session_destroy() digunakan untuk menghapus semua session. Jadi, misalkan dalam script Anda terdapat 10 nama session, dan misalkan Anda ingin menghapus semua session tersebut maka gunakan session_destroy(). Lalu unset($_SESSION['nama session']) digunakan untuk menghapus session tertentu saja.

Konsep penghapusan nilai session ini, dapat diterapkan pada proses logout. Karena pada prinsipnya proses logout ini adalah menghapus nilai session (dalam hal ini adalah username) yang telah tersimpan. Berikut ini contoh script logout.

logout.php

<?php
session_start();

unset($_SESSION['namauser']);
echo "Anda telah logout";
?>

Apabila script logout ini dijalankan, maka username yang telah tersimpan tadi tidak akan muncul lagi di halaman-halaman yang ada.

Manfaat session yang lain adalah dapat mencegah user mengakses halaman-halaman tertentu yang sifatnya private tanpa melakukan login (by pass). Dalam contoh di atas, Anda akan dapat mengakses halaman 1, halaman 2 dan 3 secara langsung tanpa proses login terlebih dahulu. Nah… dengan session, Anda dapat membuat ketiga halaman tersebut tidak bisa diakses oleh user yang masuk tanpa proses login. Idenya adalah dengan mendeteksi session username. Pendeteksian ini dilakukan di ketiga halaman tersebut. Bila terdeteksi nilai session username ini masih kosong, maka dianggap user yang mengakses tersebut tidak melakukan login terlebih dahulu, sehingga akses harus diblok. Berikut ini script untuk mendeteksi session username yang masih kosong.

cek.php

<?php
session_start();

if (!isset($_SESSION['namauser']))
{
	echo "Anda belum login";
	exit;
}

?>

Script di atas nantinya akan disisipkan ke ketiga halaman private menggunakan include(). Perintah ini disisipkan sebelum menampilkan konten yang ada pada halaman tersebut. Berikut ini contoh menyisipkan script cek.php ke halaman pertama. Untuk halaman yang lain, caranya sama.

hal1.php

<?php
session_start();
include "cek.php";

echo "<h1>Ini halaman pertama</h1>";
echo "<p>Anda login sebagai ".$_SESSION['namauser']."</p>";
echo "<p>Berikut ini menu navigasi Anda</p>";
echo "<p><a href='hal1.php'>Menu 1</a> <a href='hal2.php'>Menu 2</a> <a href='hal3.php'>Menu 3</a></p>";

?>

Begitu terdeteksi user yang mengakses halaman tersebut tanpa login, maka akan muncul ‘Anda belum login’, sedangkan konten halaman aslinya tidak akan muncul. Hal ini karena efek dari perintah ‘exit’. Penjelasan ini pernah saya tulis di artikel Membuat Autentifikasi User dengan PHP.

OK… demikian penjelasan penggunaan session dan manfaatnya. Mudah-mudahan penjelasan panjang lebar ini bisa bermanfaat bagi Anda semuanya.

VN:F [1.9.4_1102]
Rating: 9.5/10 (4 votes cast)
Apa Sih Gunanya Session di PHP?, 9.5 out of 10 based on 4 ratings
Anda ingin mendownload beberapa tool programming 100% gratis?
Silakan download di FREE PROGRAMMING TOOLS.
atau ingin berdonasi untuk pengembangan blog ini cukup dengan $1 via Paypal?



Beberapa artikel terkait


Share this article on:

Kata kunci: PHP - session -


Ada 36 komentar dalam artikel ini.

  1. Thoha says:

    Terima kasih banyak buat ilmunya, saya mang lagi nyoba buat mendalami PHP. Dan kebetulan juga lagi da tugas bikin program yang menggunakan session. This article helps me a lot! thanks!

  2. putri says:

    bagus banget artikel nya…
    makasih udah nambah pemahaman gw.

  3. sahid says:

    trimakasih bayak ya pak atas tutorialnya …

    ini sangat berguna sekali untuk sayan syang msih

    pemula….

    sekali lagi trimakasih…

    sahid,Jambi..

  4. agus says:

    TRIMS ATAS bntuanyaaa…

  5. Indra TI 07 says:

    makasih pak materi yang anda berikan sangat berharga… keep writing!!!

  6. makasih mas tutorialnya sangat bagus. kebetulan saya lagi cari info php session
    .-= NIcest Movies´s last blog ..EXTRACT =-.

  7. po handoyo says:

    mas itu bentuk var $_SESSION['nama session'] itu apakah bentuknya array? contoh apakah mungkin $_SESSION['namauser'] itu berisi beberapa nilai jika browser yg dibuka lebih dari 1. thx.

  8. rosihanari says:

    to po handoyo: seperti halnya variabel biasa, variabel session itu hanya bisa digunakan untuk menyimpan sebuah value saja (ketika dibuka di satu browser). Namun.. jika browser yang membukanya lebih dari satu, maka dia bisa digunakan untuk menyimpan lebih dari satu value.

  9. Mike says:

    makasi banyak yah pak ini sangat membantu :)

  10. Alex says:

    Thank you boss for helping me refresh my knowledge

  11. achi says:

    thanks ya tutorial sessionnya…

  12. Frans Anto says:

    thx buanget ya boss atas info dan ilmunya, maju n sukses selalu.

  13. ogahmales says:

    wah baru aja kenal & mampir ke blog mas, aq langsung betah baca artikel mas. bagus, makasih mas atas ilmu yang mas tularkan ke pengunjung blog mas. barokallohufik

  14. new says:

    T T ditempatku keluar error kaya gini knapa ya. apa dari versi php yang aku belum support session ya .. . .
    Warning: session_start() [function.session-start]: open(/tmp\sess_7e5a0630dec59ebfd095041e6a3750f3, O_RDWR) failed: No such file or directory (2) in c:\tes\submit.php on line 10

  15. rosihanari says:

    @new: coba buka file php.ini nya mas, lalu cari baris di bawah ini

    session.save_path = “…”

    baris itu untuk menunjukkan alamat direktori untuk menyimpan file sessionnya. Nah, pastikan path nya exist di pc anda.

  16. Nurfaiz says:

    Mas, mau tanya. Kalau session untuk polling, misalkan kalau sudah satu kali klik tidak bisa klik lagi dalam janka waktu tertentu, misalkan 2 jam. Itu bagaimana bentuknya ya mas? Bisa tolong diberikan contohnya karena masih newbe nih saya. Terima kasih atas pencerahannya.

  17. rosihanari says:

    @nurfaiz: kalo ada timernya lebih baik pake cookie mas, soalnya dengan cookie anda bisa set umurnya. Konsepnya anda atur lama usia cookie misalnya 2 jam, lalu setiap orang yg nge-vote berarti cookienya akan tersimpan di client. Selama cookienya masih tersimpan di client maka dia gak bisa nge-vote.

  18. ali says:

    pak mau tanya nih jika kita log out (session destroy) apa pengguna lain sessionnya juga ikut ke destroy?

  19. rosihanari says:

    @ali: tidak mas ali. yang kehapus hanya sessionnya yang bersangkutan saja, karena setiap session pasti punya id yang berbeda.

  20. fabs says:

    mantapppppppppppp

  21. Kyoshiro says:

    terimakasih informasi yang anda sampaikan sangat bermanfaat bagi saya..

  22. rohim says:

    makasih tas ilmunya yah

  23. sronto says:

    iya mas saya dah baca. tapi klo gmn sih cara biar sessionnya pake id? pake where id=$_session['id'] kah? atau kasih sample di email saya

  24. rosihanari says:

    @sronto: iya mas, nanti pakai $id = $_SESSION['id'];

  25. irma says:

    mo tanya, waktu penampilkan nilai session, nilai sessionnya ga muncul, knapa ya?? apa salah dipenulisan value sessionnya, atau di koneksi databaseny??
    makasih sebelumnya…

  26. aldo says:

    saya dah coba sriptnya tapi yang muncul ko’ begini ya?

    Warning: session_start() [function.session-start]: Cannot send session cache limiter – headers already sent (output started at C:\xampp\htdocs\session\submit.php:9) in C:\xampp\htdocs\session\submit.php on line 10

  27. rosihanari says:

    @aldo: perintah session_start() harus terletak paling atas dari script. Tidak boleh ada perintah echo atau kode HTML lain sebelum sessio_start();

  28. aldo says:

    maaf pak mau tanya lagi ni,,,,, ini script input berita yang saya gunakan

    tapi pas saya lihat di browser kok hasilnya begini ya

    Warning: Cannot modify header information – headers already sent by (output started at C:\xampp\htdocs\web\admin\library.php:8) in C:\xampp\htdocs\web\admin\input.php on line 48

    kira-kira letak kesalahannya di mana ya pak?????????

  29. rosihanari says:

    @aldo: perintah session_start() itu harus diletakkan paling atas script. Tidak boleh ada kode HTML atau echo yang terletak sebelum session_start().

  30. yudhi says:

    aduuuhh,, ko web punya saya msh sudah d logout masih tetep bisa di back tanpa login sich…
    tolong kasih saya solusi ya ..

  31. rosihanari says:

    @yudhi: wah… musti cek di scriptnya nih…

  32. Tri Laniri says:

    Pak, saya sdh coba script yg ad dlm tutorial in n sukses..nah yg saya tnyakan,misalnya ad data namauser,nama_dpn,nama_blkg dlm db.
    Nah klu menggunakan script d atas kan hanya menampilkan namauser pada setiap halamannya..untk halaman submit.php(klu menggunakan file d atas) stlh saya coba, bisa menampilkan nama_dpn & nama_blkg tpi bgmn klu mau menampilkan nama_dpn & nama_blkgnya d setiap halaman 1,2dan3.

  33. rosihanari says:

    @tri laniri: di setiap halaman itu anda musti buat query sql untuk menampilkan nama depan dan belakangnya mbak, query tsb menggunakan username dari si user yang tersimpan dalam session.

  34. Liong says:

    Tks banyak ! Penjelasannya sangat membantu sekali. Selama ini saya tidak memahami fungsi session_start() walaupun sudah banyak membaca buku panduan PHP. Anda pintar sekali.

  35. taroom says:

    mas, mungkinkah satu variable session berisi array

  36. rosihanari says:

    @taroom: bisa saja mas….



Tolong beri komentar donk!

Komentar Anda akan berguna untuk kemajuan blog ini.


Mohon maaf, komentar yang menggunakan email palsu atau komentar bernada negatif atau cemooh secara otomatis akan terhapus karena dianggap spam dan tidak akan tampil dalam daftar komentar.

Dimohon jangan pula memasukkan code program dalam bentuk apapun ke dalam komentar karena akan dianggap spam.

*
To prove you're a person (not a spam script), type the security word shown in the picture. Click on the picture to hear an audio file of the word.
Click to hear an audio file of the anti-spam word