Bug session-database pada CI3 untuk multiserver + Solusi

codeigniter-logo

Kali ini menemukan masalah saat implementasi CI3 pada aplikasi multiserver. Ini framework saya yang pertama menggunakan CI3 pada multiserver. Ternyata saat pindah server maka session datanya teracak-acak.

OK, kilas balik tentang apliksi multi server dapat dibaca lagi di sini.

Setelah baca-baca dokumentasi CI3 dan buka-buka file session libraries-nya si versi 3, terutama file system/libraries/Session/Session.php baris 140-155, maka saya simpulkan bahwa session menggunakan driver database ini tidak cocok untuk multi server.

session_start();

// Is session ID auto-regeneration configured? (ignoring ajax requests)
 if ((empty($_SERVER['HTTP_X_REQUESTED_WITH']) OR strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) !== 'xmlhttprequest')
 && ($regenerate_time = config_item('sess_time_to_update')) > 0
 )
 {
 if ( ! isset($_SESSION['__ci_last_regenerate']))
 {
 $_SESSION['__ci_last_regenerate'] = time();
 }
 elseif ($_SESSION['__ci_last_regenerate'] < (time() - $regenerate_time))
 {
 $this->sess_regenerate((bool) config_item('sess_regenerate_destroy'));
 }
 }

Mengapa demikian? Karena engine tersebut masih menggunakan variabel $_SESSION, dimana variabel tersebut adalah variabel lokal di mesin tertentu. Saat load balancer menunjuk mesin lain, maka $_SESSION akan bernilai beda, dan di database akan diregenerate lagi data yang baru. Dengan kata lain akan direset sesinya.

Hal ini sudah saya buktikan dengan merefresh halaman yang menggunakan session dan saat halaman tersebut dilarikan ke mesin/server yang lain, maka value pada database session akan berubah. Solusi? Silakan baca di sini.

semoga bermanfaat

About Ilham Hernowo S

Kelahiran Ungaran 1985. Beristri 1 beranak 2, thats enough.
This entry was posted in PHP, Programing. Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *

* Kode Akses Komentar:

* Tuliskan kode akses komentar diatas: