Cara Mengatur Sesi di Codeigniter Dengan Contoh

Manajemen Sesi CodeIgniter

Jika Anda telah mengembangkan aplikasi desktop sebelumnya, Anda mungkin tahu bahwa Anda dapat mendefinisikan variabel global, menetapkan nilai padanya dan menggunakannya sepanjang siklus hidup aplikasi membuka dan menutup lebih dari satu (1) dan setiap permintaan akan memiliki akses ke variabel global.

Dengan kata lain, status aplikasi tetap terjaga. Artinya, jika saat Anda masuk, Anda menetapkan nama perusahaan ke variabel global, bahkan setelah Anda menutup formulir masuk, status nama perusahaan tersebut tetap dipertahankan.

HTTP bekerja sedikit berbeda dari skenario di atas yang baru saja kami jelaskan. Itu tidak memiliki kewarganegaraan. Artinya, apa pun yang Anda lakukan dalam satu permintaan tidak akan bertahan pada permintaan berikutnya. T

o mengatasi masalah ini. Kami memiliki dua (2) solusi dalam PHP. Kami dapat bekerja dengan cookie yang merupakan file kecil yang ditempatkan di komputer pengguna atau bekerja dengan sesi yang mirip dengan cookie namun disimpan di server dan memiliki kapasitas lebih besar daripada cookie.

Kapan menggunakan sesi?

Sesi biasanya berguna saat Anda ingin mengetahui aktivitas pengguna dari satu halaman ke halaman lainnya. Misalnya, katakanlah Anda memiliki area terlindungi di situs web. Pengguna tidak perlu login di setiap halaman. Anda dapat mengizinkan pengguna login sekali dan menyimpan detail mereka dalam variabel sesi, lalu menggunakan kembali data yang sama pada permintaan selanjutnya. Kasus penggunaan lainnya termasuk saat bekerja pada sistem belanja dan pengguna harus menambahkan item ke keranjang belanja.

Alternatifnya, CodeIgniter juga menggunakan sesi untuk membuat data hanya tersedia satu kali pada permintaan berikutnya. Ini berguna jika Anda mungkin sedang mengedit dan memperbarui catatan database, dan Anda ingin memberikan umpan balik kepada pengguna ketika mereka diarahkan ke halaman lain.

Mengirim Pesan Flash ke halaman lain dengan Sesi CI

Di bagian ini, Anda akan belajar tentang mengirim pesan flash ke halaman lain menggunakan perpustakaan sesi di CodeIgniter

Buat file baru SessionController di

application/controllers/SessionController.php

Tambahkan kode berikut

<?php defined('BASEPATH') OR exit('No direct script access allowed');

class SessionController extends CI_Controller {

    public function __construct() {
        parent:: __construct();

        $this->load->helper('url');
        $this->load->library('session');
    }

    public function index() {
        
        $this->load->view('sessions/index');
    }
    
    public function flash_message(){
        $this->session->set_flashdata('msg', 'Welcome to CodeIgniter Flash Messages');
        redirect(base_url('flash_index'));
    }
}

SINI,

  • class SessionController extends CI_Controller {…} mendefinisikan kelas SessionController dan memperluas kelas pengontrol induk.
  • public function __construct() {…} mendefinisikan metode konstruktor yang menginisialisasi kelas induk, dan memuat url helper dan perpustakaan sesi.
  • public function index() {…} mendefinisikan metode indeks sesi yang memuat tampilan indeks sesi.
  • public function flash_message(){…} mendefinisikan metode pesan flash yang mengatur data flash kemudian dialihkan ke rute flash_index

Sekarang mari kita buat tampilan yang akan menampilkan nilai data sesi.

Buat sesi direktori baru di aplikasi/tampilan

Buat file baru index.php di application/views/sessions

Tambahkan kode berikut

<html>
    <head>
        <title>Code Igniter Flash Session</title>
    </head>
    <body>
        <p>The session value of msg is <b> <?=$this->session->userdata('msg');?> </b></p>
    </body>
</html>

SINI,

session->userdata('msg');?> mengambil nilai data sesi dengan kunci msg dan menampilkannya di browser.

Sekarang mari kita buat rute untuk metode sesi flash kita

Buka aplikasi/config/routes.php

Tambahkan baris berikut

$route['flash_index'] = 'session controller';
$route['flash_message'] = 'session controller/flash_message';

Sekarang mari kita mulai server bawaannya PHP dan uji pesan flash kami

Buka terminalnya

Jalankan perintah berikut

cd C:\Sites\ci-app
php -S localhost:3000

SINI,

Perintah di atas menelusuri direktori kode aplikasi dan memulai server bawaan pada port 3000.

Catatan: jalur aplikasi harus sesuai dengan jalur tempat Anda mengunduh CodeIgniter, dan Anda dapat menggunakan nomor port apa pun yang gratis di komputer Anda. Tidak perlu menggunakan port 3000.

Muat URL berikut di peramban web Anda: http://localhost:3000/flash_message

Anda akan diarahkan ke URL berikut, dan Anda akan mendapatkan hasil berikut: http://localhost:3000/flash_index

Mengirim Pesan Flash ke halaman lain

Klik tombol segarkan browser web Anda atau tekan F5

Anda sekarang akan mendapatkan hasil berikut

Mengirim Pesan Flash ke halaman lain

Menyimpan Data Pengguna dalam Sesi CI

Sekarang mari kita lihat contoh yang lebih maju. Untuk membuatnya sederhana, kami akan mensimulasikan otentikasi pengguna dan tidak melakukan implementasi sebenarnya untuk memverifikasi catatan pengguna dalam database dan kata sandi yang dikirimkan.

Mari kita mulai dengan rutenya

Buka rute.php yang terletak di aplikasi/config

Tambahkan rute berikut

$route['login'] = 'sessioncontroller/login';
$route['authenticate'] = 'sessioncontroller/authenticate';
$route['settings'] = 'sessioncontroller/settings';
$route['dashboard'] = 'sessioncontroller/dashboard';
$route['logout'] = 'sessioncontroller/logout';

SINI,

  • $route['login'] = 'sessioncontroller/login'; mendefinisikan rute yang menampilkan formulir login
  • $route['authenticate'] = 'sessioncontroller/authenticate'; mendefinisikan rute yang mensimulasikan login pengguna yang berhasil dan mengatur data login sesi.
  • $route['settings'] = 'pengontrol sesi/pengaturan'; mendefinisikan halaman terlindungi yang hanya dapat diakses oleh pengguna yang login
  • $route['dashboard'] = 'sessioncontroller/dasbor'; mendefinisikan halaman terlindungi yang hanya dapat diakses oleh pengguna yang login.
  • $route['logout'] = 'sessioncontroller/logout'; mengeluarkan pengguna dengan menghancurkan data sesi

Sekarang mari perbarui SessionController

Buka aplikasi/controllers/SessionController.php

Tambahkan metode berikut

public function check_auth($page) {
        if (!$this->session->userdata('logged_in')) {
            $this->session->set_flashdata('msg', "You need to be logged in to access the $page page.");
            redirect('login');
        }
    }

    public function login() {
        $this->load->view('sessions/login');
    }

    public function authenticate() {
        $this->session->set_userdata('username', 'John Doe');
        $this->session->set_userdata('logged_in', TRUE);
        redirect(base_url('dashboard'));
    }

    public function dashboard() {
        $this->check_auth('dashboard');
        $this->load->view('sessions/dashboard');
    }

    public function settings() {
        $this->check_auth('settings');
        $this->load->view('sessions/settings');
    }

    public function logout() {
        $this->session->unset_userdata('username');
        $this->session->unset_userdata('logged_in');
        redirect(base_url('login'));
    }

SINI,

  • public function check_auth($page) {…} mendefinisikan metode yang memeriksa apakah pengguna login kemudian mengizinkan akses ke halaman. Jika pengguna belum login maka pengguna diarahkan ke halaman login dengan pesan flash.
  • public function login() {…} memuat tampilan login yang terletak di direktori sesi.
  • fungsi publik authenticate() {…} menetapkan data pengguna sesi untuk kunci logged_in dan username. CATATAN: Kami tidak memverifikasi detail login apa pun terhadap database. Kami hanya berasumsi bahwa detail yang dikirimkan baik-baik saja dan menetapkan data sesi.
  • public function dashboard() {…} memuat halaman dashboard setelah memanggil $this->check_auth('dashboard'); yang memverifikasi bahwa kunci sesi log_in telah disetel.
  • public function settings() {…} memuat halaman pengaturan yang juga dilindungi
  • public function logout() {…} menghancurkan data sesi dan mengeluarkan pengguna. Metode ini juga mengalihkan ke halaman login

Tampilan Sesi CodeIgniter

Buat tampilan berikut di application/views/sessions

  • dashboard.php
  • masuk.php
  • settings.php

Tambahkan kode berikut ke dashboard.php

<!DOCTYPE html>
<html>
    <head>
        <title>Dashboard</title>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.7.2/css/bulma.min.css">
    </head>
    <body>
        <div class="container">
            <div class="column">
                <nav class="navbar" role="navigation" aria-label="main navigation">
                    <div id="navbarBasicExample" class="navbar-menu">
                        <div class="navbar-start">
                            <a href="<?= site_url('dashboard')?>" class="navbar-item is-active">Dashboard</a>
                            <a href="<?= site_url('settings')?>" class="navbar-item">Settings</a>
                        </div>

                        <div class="navbar-end">
                            <div class="navbar-item has-dropdown is-hoverable">
                                <a class="navbar-link"><?=$this->session->userdata('username');?></a>

                                <div class="navbar-dropdown">
                                    <a class="navbar-item">My Profile</a>
                                    <hr class="navbar-divider">
                                    <a class="navbar-item">Sign out</a>
                                </div>
                            </div>
                        </div>
                    </div>
                </nav>
                <h3>Welcome Page</h3>
            </div>
        </div>
    </body>
</html>

SINI,

session->userdata('username');?> menampilkan nama pengguna yang kita atur dalam metode otentikasi

Tambahkan kode berikut ke login.php

<!DOCTYPE html>
<html>
    <head>
        <title>Login</title>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.7.2/css/bulma.min.css">
    </head>
    <body>
        <div class="container">
            <div class="column">
                <p><?=$this->session->userdata('msg');?></p>
                <form method="post" action="<?= site_url('authenticate')?>">
                    <div class="field">
                        <label class="label">Username</label>
                        <div class="control">
                            <input class="input" type="text" placeholder="Text input">
                        </div>
                    </div>
                    <div class="field">
                        <label class="label">Password</label>
                        <div class="control">
                            <input class="input" type="passport" placeholder="Text input">
                        </div>
                    </div>
                    <div class="field is-grouped">
                        <div class="control">
                            <button class="button is-success">Login</button>
                        </div>
                    </div>
                </form>
            </div>
        </div>
    </body>
</html>

SINI,

Formulir login dikirimkan untuk mengautentikasi rute.

Tambahkan kode berikut ke settings.php

<!DOCTYPE html>
<html>
    <head>
        <title>Settings</title>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.7.2/css/bulma.min.css">
    </head>
    <body>
        <div class="container">
            <div class="column">
                <nav class="navbar" role="navigation" aria-label="main navigation">
                    <div id="navbarBasicExample" class="navbar-menu">
                        <div class="navbar-start">
                            <a href="<?= site_url('dashboard')?>" class="navbar-item">Dashboard</a>
                            <a href="<?= site_url('settings')?>" class="navbar-item">Settings</a>
                        </div>

                        <div class="navbar-end">
                            <div class="navbar-item has-dropdown is-hoverable">
                                <a class="navbar-link">Jim Jones</a>

                                <div class="navbar-dropdown">
                                    <a href="#" class="navbar-item">My Profile</a>
                                    <hr class="navbar-divider">
                                    <a href="<?= site_url('logout')?>" class="navbar-item">Sign out</a>
                                </div>
                            </div>
                        </div>
                    </div>
                </nav>
                <h3>Settings Page</h3>
            </div>
        </div>
    </body>
</html>

Itu saja untuk pandangan kami. Sekarang mari kita uji aplikasi kita.

Dalam tutorial ini, kami menggunakan server web PHP bawaan, tetapi Anda dapat menggunakan server web apa pun yang mendukung PHP.

Buka terminalnya

Jalankan perintah berikut

cd C:\Sites\ci-app
php -S localhost:3000

SINI,

Perintah di atas menelusuri direktori kode aplikasi dan memulai server bawaan pada port 3000.

Catatan: jalur aplikasi harus sesuai dengan jalur tempat Anda mengunduh CodeIgniter, dan Anda dapat menggunakan nomor port apa pun yang gratis di komputer Anda. Tidak perlu menggunakan port 3000.

Buka URL berikut di peramban web Anda: http://localhost:3000/dashboard

Anda akan diarahkan ke halaman berikut

Tampilan Sesi CodeIgniter

Klik tombol Masuk

Anda akan melihat hasil berikut ini

Tampilan Sesi CodeIgniter

Setelah kita login, sekarang kita dapat melihat data sesi.

Kesimpulan

Dalam tutorial ini, Anda telah mempelajari dasar-dasar pustaka sesi CodeIgniter dan mempelajari cara menggunakannya untuk menyimpan data sementara sebagai pesan flash dan cara menggunakan penyimpanan data yang lebih permanen, yaitu data login pengguna.