Bagaimana Bekerja dengan Session Data dalam CodeIgniter
() translation by (you can also view the original English article)
Sebagai seorang pengembang CodeIgniter, sangat penting bagi Anda untuk memahami cara bekerja dengan core library session. Tentu saja, Anda selalu dapat menggunakan default syntax $_SESSION
, tetapi sebagi gantinya selalu disarankan untuk menggunakan pembungkus.
Dimulai dengan cara memuat session library, kami akan beralih ke diskusi tentang cara menambahkan, mengambil, menghapus, dan melakukan destroy variabel session. Pada segmen terakhir, kita akan melihat berbagai built-in session driver berbeda yang telah disediakan oleh framework CodeIgniter itu sendiri.
Cara Memuat Library Session
Jika Anda ingin bekerja dengan session pada CodeIgniter, hal pertama yang Anda perlukan adalah built-in library session. Kecuali dan Sampai Anda mengembangkan aplikasi web yang tidak memerlukan session sama sekali, Anda tidak perlu repot-repot tentang library session. Meskipun hal itu tidaklah terjadi pada kebanyakan kasus, Anda dapat melakukan autoload untuk library session pada CodeIgniter, sehingga mengizinkan fitur penanganan session untuk setiap permintaan yang terjadi pada website.
Silakan membuka file yang terletak pada application/config/autoload.php
. Temukan bagian berikut.
1 |
/*
|
2 |
| -------------------------------------------------------------------
|
3 |
| Auto-load Libraries
|
4 |
| -------------------------------------------------------------------
|
5 |
| These are the classes located in system/libraries/ or your
|
6 |
| application/libraries/ directory, with the addition of the
|
7 |
| 'database' library, which is somewhat of a special case.
|
8 |
|
|
9 |
| Prototype:
|
10 |
|
|
11 |
| $autoload['libraries'] = array('database', 'email', 'session');
|
12 |
|
|
13 |
| You can also supply an alternative library name to be assigned
|
14 |
| in the controller:
|
15 |
|
|
16 |
| $autoload['libraries'] = array('user_agent' => 'ua');
|
17 |
*/
|
18 |
$autoload['libraries'] = array(); |
Array $autoload ['libraries']
menyimpan daftar pustaka yang perlu dimuat secara otomatis. Sesuai kebutuhan kita, mari kita ubah agar terlihat seperti ini:
1 |
$autoload['libraries'] = array('session'); |
Juga, ada cara lain yang bisa Anda lakukan. Anda dapat menggunakan kode berikut di suatu tempat pada file controller Anda untuk memuat library session.
1 |
$this->load->library('session'); |
Sejauh ini kurang lebih seperti itu untuk berhubungan dengan inisialisasi library session.
Dalam beberapa bagian berikutnya, kita akan membahas berbagai operasi yang dapat Anda lakukan dengan core library session. Untuk mendemonstrasikannya, kami akan membuat contoh file controller yang memuat library session dan menyediakan method yang akan dibahas pada seluruh artikel ini.
Silahkan buat file pada application/controllers/Example.php
dengan isi sebagai berikut.
1 |
<?php
|
2 |
defined('BASEPATH') OR exit('No direct script access allowed'); |
3 |
|
4 |
class Example extends CI_Controller { |
5 |
public function __construct() |
6 |
{
|
7 |
parent::__construct(); |
8 |
|
9 |
// load Session Library
|
10 |
$this->load->library('session'); |
11 |
|
12 |
// load url helper
|
13 |
$this->load->helper('url'); |
14 |
}
|
15 |
|
16 |
public function index() |
17 |
{
|
18 |
/**** SET SESSION DATA ****/
|
19 |
// set single item in session
|
20 |
$this->session->set_userdata('favourite_website', 'https://tutsplus.com'); |
21 |
|
22 |
// set array of items in session
|
23 |
$arraydata = array( |
24 |
'author_name' => 'Sajal Soni', |
25 |
'website' => 'http://code.tutsplus.com', |
26 |
'twitter_id' => '@sajalsoni', |
27 |
'interests' => array('tennis', 'travelling') |
28 |
);
|
29 |
$this->session->set_userdata($arraydata); |
30 |
|
31 |
/**** GET SESSION DATA ****/
|
32 |
// get data from session
|
33 |
echo "Favourite Website: ". $this->session->userdata('favourite_website'); |
34 |
echo "<br>"; |
35 |
echo "Author Name: ". $this->session->userdata('author_name'); |
36 |
echo "<br>"; |
37 |
echo "Interest (Array Example): " . $this->session->userdata('interests')[0]; |
38 |
echo "<br>"; |
39 |
|
40 |
// get e'thing stored in session at once
|
41 |
echo '<pre>'; |
42 |
print_r($this->session->userdata()); |
43 |
|
44 |
/**** REMOVE SESSION DATA ****/
|
45 |
// unset specific key from session
|
46 |
$this->session->unset_userdata('favourite_website'); |
47 |
|
48 |
// unset multiple items at once
|
49 |
$keys = array('twitter_id', 'interests'); |
50 |
$this->session->unset_userdata($keys); |
51 |
|
52 |
echo '<pre>'; |
53 |
print_r($this->session->userdata()); |
54 |
}
|
55 |
|
56 |
public function setflash() |
57 |
{
|
58 |
// set flash data
|
59 |
$this->session->set_flashdata('flash_welcome', 'Hey, welcome to the site!'); |
60 |
|
61 |
// mark existing data as flash data
|
62 |
$this->session->set_userdata('flash_message', 'I am flash message!'); |
63 |
$this->session->mark_as_flash('flash_message'); |
64 |
|
65 |
redirect('example/getflash'); |
66 |
}
|
67 |
|
68 |
public function getflash() |
69 |
{
|
70 |
// get flash data
|
71 |
echo "Flash welcome message: ". $this->session->flashdata('flash_welcome'); |
72 |
echo '<pre>'; |
73 |
print_r($this->session->flashdata()); |
74 |
}
|
75 |
|
76 |
public function tempdata() |
77 |
{
|
78 |
// set temp data
|
79 |
$this->session->set_tempdata('coupon_code', 'XYEceQ!', 300); |
80 |
|
81 |
// mark existing data as temp data
|
82 |
$this->session->set_userdata('coupon_code', 'XYEceQ!'); |
83 |
$this->session->mark_as_temp('coupon_code', 300); |
84 |
|
85 |
// get temp data
|
86 |
echo $this->session->tempdata('coupon_code'); |
87 |
}
|
88 |
|
89 |
public function destroy() |
90 |
{
|
91 |
$this->session->set_userdata('favourite_website', 'http://tutsplus.com'); |
92 |
|
93 |
// destory session
|
94 |
$this->session->sess_destroy(); |
95 |
}
|
96 |
}
|
Itu adalah file controller yang sangat dasar yang harus Anda kenal sebagai seorang pengembang CodeIgniter. Sekarang, kami siap untuk beralih ke beberapa bagian berikutnya yang akan memberikan wawasan tentang konsep penanganan session.
Bagaimana Menambahkan, Mengambil dan Menghapus Data Session
Untuk memulainya, mari kita gunakan method kode __construct
.
1 |
public function __construct() |
2 |
{
|
3 |
parent::__construct(); |
4 |
|
5 |
// load Session Library
|
6 |
$this->load->library('session'); |
7 |
|
8 |
// load url helper
|
9 |
$this->load->helper('url'); |
10 |
}
|
Seandainya Anda belum mengisi library session secara otomatis, hal tersebut akan melakukannya pada saat pertama kali. Selain itu, kami juga memuat helper url
yang memungkinkan kami untuk menggunakan method utilitas tertentu yang akan kita lihat nanti.
Selanjutnya, gunakan method kode index
.
1 |
public function index() |
2 |
{
|
3 |
/**** SET SESSION DATA ****/
|
4 |
// set single item in session
|
5 |
$this->session->set_userdata('favourite_website', 'http://tutsplus.com'); |
6 |
|
7 |
// set array of items in session
|
8 |
$arraydata = array( |
9 |
'author_name' => 'Sajal Soni', |
10 |
'website' => 'http://code.tutsplus.com', |
11 |
'twitter_id' => '@sajalsoni', |
12 |
'interests' => array('tennis', 'travelling') |
13 |
);
|
14 |
$this->session->set_userdata($arraydata); |
15 |
|
16 |
/**** GET SESSION DATA ****/
|
17 |
// get data from session
|
18 |
echo "Favourite Website: ". $this->session->userdata('favourite_website'); |
19 |
echo "<br>"; |
20 |
echo "Author Name: ". $this->session->userdata('author_name'); |
21 |
echo "<br>"; |
22 |
echo "Interest (Array Example): " . $this->session->userdata('interests')[0]; |
23 |
echo "<br>"; |
24 |
|
25 |
// get e'thing stored in session at once
|
26 |
echo '<pre>'; |
27 |
print_r($this->session->userdata()); |
28 |
|
29 |
/**** REMOVE SESSION DATA ****/
|
30 |
// unset specific key from session
|
31 |
$this->session->unset_userdata('favourite_website'); |
32 |
|
33 |
// unset multiple items at once
|
34 |
$keys = array('twitter_id', 'interests'); |
35 |
$this->session->unset_userdata($keys); |
36 |
|
37 |
echo '<pre>'; |
38 |
print_r($this->session->userdata()); |
39 |
}
|
Saat Anda sudah memuat library session, Anda dapat menggunakan $this->session
untuk mengakses objek session dan mengakses method yang didukung. Method set_userdata
digunakan untuk membuat variabel session baru, dan umumnya dibutuhkan dua argumen — variabel kunci dan nilai.
1 |
$this->session->set_userdata('favourite_website', 'http://tutsplus.com'); |
Anda juga dapat menggunakan method set_userdata
untuk membuat beberapa variabel dalam satu panggilan. Dalam hal ini, Anda hanya perlu memberikan satu argumen, dan itu harus berupa array seperti yang ditunjukkan di bawah ini.
1 |
// set array of items in session
|
2 |
$arraydata = array( |
3 |
'author_name' => 'Sajal Soni', |
4 |
'website' => 'http://code.tutsplus.com', |
5 |
'twitter_id' => '@sajalsoni', |
6 |
'interests' => array('tennis', 'travelling') |
7 |
);
|
8 |
$this->session->set_userdata($arraydata); |
User dengan ketelitian yang tinggi akan menyadari bahwa Anda juga dapat menetapkan array sebagai nilai dari setiap variabel session, seperti yang ditunjukkan dalam contoh variabel interests
diatas.
Sekarang, mari kita lihat bagaimana cara mengambil nilai dari setiap variabel session. Method userdata
digunakan untuk mengambil nilai dari setiap variabel session, dan biasanya diperlukan variabel kunci dari variabel session yang Anda cari sebagai argumen pertama.
1 |
echo "Favourite Website: ". $this->session->userdata('favourite_website'); |
Jika Anda mencari salah satu nilai dalam array, Anda dapat menggunakan contoh sebagai berikut:
1 |
echo "Interest (Array Example): " . $this->session->userdata('interests')[0]; |
Biasanya, Anda ingin tahu berapa banyak total variabel yang disimpan dalam session yang aktif untuk keperluan debugging, dan Anda juga dapat melakukannya.
1 |
// get e'thing stored in session at once
|
2 |
echo '<pre>'; |
3 |
print_r($this->session->userdata()); |
Ya, method userdata
yang sama datang untuk menyelamatkan kita! Jika Anda tidak mengirimkan argumen apa pun ke method userdata
, itu akan mengembalikan semua variabel session.
Akhirnya, mari kita lihat bagaimana Anda dapat menghapus variabel dari session. Ini adalah method unset_userdata
yang dapat Anda gunakan jika Anda ingin menghapus nilai session apa pun.
1 |
// unset specific key from session
|
2 |
$this->session->unset_userdata('favourite_website'); |
Dan inilah variasi method yang sama yang akan menunjukkan cara menghapus beberapa nilai sekaligus.
1 |
// unset multiple items at once
|
2 |
$keys = array('twitter_id', 'interests'); |
3 |
$this->session->unset_userdata($keys); |
Dan itu seharusnya menghapus nilai session dari twitter_id
dan intersert
.
Silahkan menguji method index
untuk melihat hal-hal yang terjadi.
Hal yang Berguna: Flashdata dan Tempdata
Pada bagian terakhir, kami membahas dasar-dasar penanganan session di CodeIgniter. Pada bagian ini, kita akan membahas beberapa method utilitas lain yang disediakan oleh library session.
Dalam perkembangan sehari-hari, Anda sering kali perlu menampilkan pesan sebagai tanggapan atas tindakan terhadap user tertentu. Sebagai contoh, Anda ingin menampilkan pesan sukses ketika seseorang memposting komentar pada situs Anda, dan pesan itu hanya boleh ditampilkan sekali. Method set_flashdata
adalah kandidat yang sempurna untuk penggunaan jenis kasus ini.
Bahkan, set_flashdata
sangat mirip dengan method set_userdata
yang memungkinkan Anda untuk menyimpan nilai dalam session. Satu-satunya pengecualian adalah bahwa nilai session yang ditetapkan oleh method flashdata
hanya tersedia untuk permintaan berikutnya. Dalam permintaan berikutnya, Anda tidak akan dapat mengakses variabel-variabel ini lagi karena telah dihapus.
Mengambil method kode setflash
.
1 |
public function setflash() |
2 |
{
|
3 |
// set flash data
|
4 |
$this->session->set_flashdata('flash_welcome', 'Hey, welcome to the site!'); |
5 |
|
6 |
// mark existing data as flash data
|
7 |
$this->session->set_userdata('flash_message', 'I am flash message!'); |
8 |
$this->session->mark_as_flash('flash_message'); |
9 |
|
10 |
redirect('example/getflash'); |
11 |
}
|
Anda dapat membuat sebuah variabel flashdata
baru dengan cara yang sama Anda akan telah menciptakan sebuah variabel session reguler yang menggunakan method set_userdata
. Di sisi lain, Anda juga dapat menandai sebuah variabel session yang sudah ada sebagai variabel flashdata
. Dalam hal ini, Anda perlu menggunakan method mark_as_flash
, seperti yang telah ditunjukkan pada kode di atas.
Akhirnya, kami me-redirect user ke method getflash
yang menunjukkan bagaimana menggunakan variabel flashdata yang telah ditetapkan dalam method setflash
. Mari kita lihat dengan singkat method getflash
.
1 |
public function getflash() |
2 |
{
|
3 |
// get flash data
|
4 |
echo "Flash welcome message: ". $this->session->flashdata('flash_welcome'); |
5 |
echo '<pre>'; |
6 |
print_r($this->session->flashdata()); |
7 |
}
|
Seperti yang diharapkan, ada method flashdata
yang memungkinkan Anda untuk mengambil variabel session yang disimpan sebagai flashdata. Jika Anda memanggil method flashdata
tanpa argumen, itu akan mengembalikan semua variabel flashdata yang mirip dengan method userdata
.
Lanjutkan dan uji method setflash
. Anda akan dialihkan ke URL getflash, dan Anda akan melihat pesannya. Jika Anda me-refresh halaman getflash, Anda tidak akan melihat pesan itu lagi!
Selanjutnya, ada variasi lain yang disediakan oleh library session dalam kategori ini — variabel session tempdata. Jika Anda ingin membuat variabel session untuk jangka waktu tertentu, method set_tempdata
adalah yang Anda cari.
Misalnya, jika Anda ingin membuat variabel session yang harus dihapus secara otomatis setelah jangka waktu tertentu, Anda bisa menggunakan method set_tempdata
untuk membuat variabel seperti itu, seperti yang ditunjukkan dalam method berikut.
1 |
public function tempdata() |
2 |
{
|
3 |
// set temp data
|
4 |
$this->session->set_tempdata('coupon_code', 'XYEceQ!', 300); |
5 |
|
6 |
// mark existing data as temp data
|
7 |
$this->session->set_userdata('coupon_code', 'XYEceQ!'); |
8 |
$this->session->mark_as_temp('coupon_code', 300); |
9 |
|
10 |
// get temp data
|
11 |
echo $this->session->tempdata('coupon_code'); |
12 |
}
|
Argumen ketiga dalam method set_tempdata
menunjukkan jumlah detik setelah itu variabel akan dihapus dari session.
Anda juga dapat menandai variabel session yang ada sebagai tempdata menggunakan method mark_as_temp
asalkan Anda telah membuat variabel session menggunakan method set_userdata
.
Akhirnya, Anda dapat menggunakan method tempdata
untuk mengambil nilai dari setiap variabel tempdata.
Jadi ini bagus untuk memiliki method utilitas seperti yang Anda inginkan dalam siklus hidup proses pengembangan Anda sehari-hari!
Apa yang Harus Anda Tidak Lupakan: Session Destroy
Destroy session mungkin adalah hal terakhir yang ingin Anda lakukan saat pengguna logout. Ini memastikan bahwa variabel session yang telah ditetapkan sejauh ini dihapus dari session yang aktif dan tidak lagi tersedia untuk permintaan berikutnya.
Mari memakai method kode untuk melakukan proses destroy
dan melewatinya.
1 |
public function destroy() |
2 |
{
|
3 |
$this->session->set_userdata('favourite_website', 'http://tutsplus.com'); |
4 |
|
5 |
// destroy session
|
6 |
$this->session->sess_destroy(); |
7 |
}
|
Ini adalah method sess_destroy
yang membantu kita menghancurkan session yang aktif. Tentu saja, itu juga akan menghapus tempdata dan variabel flashdata yang ditetapkan pada session aktif.
Pastikan Anda terbiasa melakukan proses destroy session setelah tidak lagi digunakan dalam konteks penggunaan untuk saat ini.
Sentuhan Akhir: Session Drivers
Kita berada pada bagian terakhir dari artikel ini — Session Driver. Biasanya, Anda tidak peduli tentang konfigurasi session driver dalam aplikasi Anda sebagai session driver secara default, sistem file, sudah dikonfigurasi dengan pengaturan default.
Jadi ini adalah sistem file yang menyimpan semua data yang terkait dengan session, dan itu digunakan secara luas dan merupakan standar yang diterima untuk penanganan session. Karena itu, CodeIgniter juga mendukung session driver lain yang dapat Anda gunakan jika Anda ingin beralih dari session driver sistem file default.
Berikut adalah daftar dari semua session driver yang didukung dalam CodeIgniter:
- File
- Database
- Redis
- Memcached
Pengandar session database, seperti namanya, menyimpan data session dalam database yang telah Anda konfigurasikan untuk aplikasi CodeIgniter Anda.
Di sisi lain, dua session driver lainnya adalah mekanisme penyimpanan dalam memori yang lebih disukai untuk situs web berkinerja tinggi.
Di file application/config/config.php
, Anda dapat mengkonfigurasi session session driver yang ingin Anda gunakan dalam aplikasi Anda.
1 |
$config['sess_driver'] = 'database'; |
2 |
$config['sess_save_path'] = 'custom_sessions'; |
Ini memberitahu CodeIgniter untuk menggunakan session driver database, dan data session akan disimpan dalam tabel custom_sessions
MySQL.
Diskusi setiap session driver berada di luar cakupan artikel ini, tetapi Anda dapat memeriksa dokumentasi situs resmi yang menyediakan panduan mendalam untuk setiap driver.
Kesimpulan
Penanganan session di CodeIgniter adalah topik dari tutorial hari ini, dan kami mendiskusikannya secara menyeluruh dengan melihat setiap aspek dari persoalan.
Dimulai dengan operasi sesi dasar, kami juga menggunakan method flashdata dan tempdata yang keren, dan itu adalah diskusi tentang sessiondriver yang menjadi kesimpulan artikel kami.
Seperti biasa, Anda dapat meneriakkan pertanyaan dan saran Anda menggunakan kolom komentar di bawah ini!