Skip to content

Menyimpan Session di Database, Bag. 3

Kita sudah membahas bagaimana cara membuat fungsi untuk menyimpan data session yang dibuat oleh PHP ke dalam database MySQL pada tulisan yang lalu. Nah, sekarang saatnya untuk membahas bagaimana menggunakan fungsi tersebut.

Pengin tahu bagaimana caranya? Tidak jauh beda dengan penggunaan session seperti biasanya. Cuma kalau sebelumnya session akan disimpan dalam bentuk file, namun sekarang secara otomatis session tersebut akan masuk ke database.

Namun sebelumnya kita lihat dulu listing lengkap dari class tersebut.

Listing 1.

<?php
class SessionManager
{
   var $life_time;

   function SessionManager()
   {
      //baca setting maxlifetime dari PHP
      $this->life_time = get_cfg_var("session.gc_maxlifetime");

      //registrasikan fungsi yang akan dipanggil pada saat
      //terjadi proses baca tulis session
      session_set_save_handler(
         array(&$this, "open"),
         array(&$this, "close"),
         array(&$this, "read"),
         array(&$this, "write"),
         array(&$this, "destroy"),
         array(&$this, "gc")
      );
   }

   function open($save_path, $session_name)
   {
      global $sess_save_path;
      $sess_save_path = $save_path;
      return true;
   }

   function close()
   {
      return true;
   }

   function read($id)
   {
      $data = '';
      $time = time();
      $newid = mysql_real_escape_string($id);
      $sql = "SELECT data FROM sessions
              WHERE session_id = '" . $newid . "' AND expires > " . $time;
      $rs = mysql_query($sql);
      $a = mysql_num_rows($rs);
      if ($a > 0)
      {
         $row = mysql_fetch_array($rs);
         $data = $row['data'];
      }
      return $data;
   }

   function write($id, $data)
   {
      $time = time() + $this->life_time;
      $newid = mysql_real_escape_string($id);
      $newdata = mysql_real_escape_string($data);
      $sql = "REPLACE sessions (session_id, data, expires)
              VALUES ('" . $newid . "','" . $newdata . "'," . $time . ")";
      $rs = mysql_query($sql);
      return true;
   }

   function destroy($id)
   {
      $newid = mysql_real_escape_string($id);
      $sql = "DELETE FROM sessions
              WHERE session_id = '" . $newid . "'";
      mysql_query($sql);
      return true;
   }

   function gc()
   {
      $sql = "DELETE FROM sessions
              WHERE expires < UNIX_TIMESTAMP();";
      mysql_query($sql);
      return true;
  }
}
?>

Perhatikan bahwa kode di atas merupakan sebuah kelas. Oleh karena itu agar bisa dipakai, kita perlu membuat sebuah obyek dari kelas tersebut. Cara membuatnya bisa dilihat pada listing 2 berikut ini.

Listing 2.

$sess = new SessionManager();

Satu lagi yang perlu diingat bahwa pada class SessionManager, kita menyimpan data session pada database. Untuk itu kita harus melakukan koneksi ke database tersebut terlebih dahulu. Kenapa harus demikian? Karena dalam kelas yang kita buat, asumsinya sudah ada koneksi database.

Biar lebih praktis, kita buat file tersendiri untuk melakukan koneksi database, misalnya koneksi.php. Kodenya bisa dilihat pada listing 3 berikut ini.

Listing 3.

<?php

$error_message = '';

if (!mysql_connect('localhost', 'root', 'password'))
{
   $error_message = 'Koneksi database gagal';
}

mysql_select_db('testing');

?>

Selanjutnya kita bisa menggunakan class SessionManager pada setiap halaman web yang memerlukan session. Contoh pemakaiannya bisa kita lihat pada listing 4 berikut ini.

Listing 4.

<?php

include ('koneksi.php');
include ('session.php');

$sess = new SessionManager();
session_start();

if (empty($_SESSION['count'])) {
   $_SESSION['count'] = 1;
} else {
   $_SESSION['count']++;
}
?>

<p>
Hello visitor, you have seen this page <?php echo $_SESSION['count']; ?> times.
</p>

Dengan MySQL Query Browser, kita bisa lihat bahwa data session sekarang disimpan pada database, yaitu pada tabel sessions.

session_database

(selesai)

Source code bisa didownload di sini.

Tulisan Terkait:

Bagaimana Komentar Anda?

Monggo kalau Anda mau mengomentari tulisan di atas! Bertanya atau mengkritik juga boleh, tapi jangan terlalu menyakitkan :).

  • Dimas | October 19th, 2009 jam 12:22 am

    Thx Mas tutorial saat bermanfaat terima kasih ya! Saya mau tanya, saya sekarang lagi membuat aplikasi ujian online untuk tugas kuliah, yang jadi pertanyaan saya: bagaimana cara membuat pesan apabila waktu session habis sehingga data isian jawaban akan langsung otomatis masuk ke database dan langsung dimunculkan nilainya? Saya tunggu jawabannya ya Mas.. thanks

  • Wahyu Wibowo | October 20th, 2009 jam 8:04 pm

    @dimas
    Yang habis itu session PHP-nya atau apa? Kalau yang dimaksud session PHP sepertinya kok sulit. Mending buat timer dengan javascript saja, itu lebih mudah. Atau kalau mau pakai PHP tentukan saja berapa lama waktu yang diijinkan untuk ujian. Terus dicatat waktu awal dan akhirnya. Itu sepertinya juga bisa.

Tinggalkan Pesan