Cara Mengatur Sesi di CodePemantik Api dengan Contoh

⚡ Ringkasan Cerdas

CodeIgniter Session Management menyimpan data pengguna di seluruh permintaan HTTP tanpa status, memungkinkan aplikasi untuk mengingat pengguna yang masuk, item keranjang belanja, atau pesan kilat satu kali. Contoh ini membangun pesan kilat dan simulasi login menggunakan CodePustaka sesi Igniter.

  • 🌐 Mengapa Sesi Ini: HTTP bersifat stateless, sehingga sesi menyimpan data pengguna seperti status login di seluruh permintaan halaman terpisah pada server.
  • 🍪 Cookie vs. Sesi: Cookie menyimpan data kecil di komputer pengguna, sedangkan sesi menyimpan data yang lebih besar di server dan lebih aman untuk nilai-nilai sensitif.
  • 💨 Data Kilat: set_flashdata() menyimpan pesan yang hanya tersedia pada permintaan berikutnya, ideal untuk umpan balik satu kali setelah pengalihan.
  • 🔑 Data pengguna: Fungsi set_userdata() menyimpan nilai-nilai seperti username dan logged_in selama sesi berlangsung, dan fungsi unset_userdata() menghapusnya saat logout.
  • 🛡️ Kontrol akses: Metode check_auth() yang dapat digunakan kembali akan mengarahkan pengunjung ke halaman login setiap kali kunci sesi logged_in hilang.
  • 🧪 Contoh Praktis: Tutorial ini menghubungkan rute, pengontrol, dan tampilan bergaya Bulma untuk mendemonstrasikan alur sesi flash dan sesi persisten.
  • 🤖 Bantuan AI: Alat AI dapat membuat kerangka pengontrol sesi, menghasilkan peta rute, dan menandai penanganan sesi yang tidak aman sebelum diterapkan.

CodeManajemen Sesi Igniter

CodeManajemen Sesi Igniter

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

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

HTTP bekerja sedikit berbeda dari skenario yang baru saja kita jelaskan. HTTP bersifat stateless. Artinya, apa pun yang Anda lakukan dalam satu permintaan tidak akan tersimpan dalam permintaan berikutnya.

Untuk mengatasi masalah ini, kita memiliki dua (2) solusi di PHP. Kita dapat bekerja dengan cookie, yaitu file kecil yang ditempatkan di komputer pengguna, atau bekerja dengan sesi, yang mirip dengan cookie tetapi disimpan di server dan memiliki kapasitas lebih besar daripada cookie.

Kapan menggunakan sesi?

Sesi biasanya berguna ketika Anda ingin mengetahui aktivitas pengguna dari satu halaman ke halaman lain. Misalnya, katakanlah Anda memiliki area yang dilindungi di situs web. Pengguna tidak perlu masuk di setiap halaman. Anda dapat membiarkan pengguna masuk sekali dan menyimpan detail mereka dalam variabel sesi, kemudian menggunakan kembali data yang sama pada permintaan selanjutnya. Kasus penggunaan lainnya termasuk saat mengerjakan toko online.ping sistem dan pengguna harus menambahkan barang ke toko.ping gerobak.

Kalau tidak, CodeIgniter juga menggunakan sesi untuk membuat data hanya tersedia sekali pada permintaan berikutnya. Ini berguna ketika Anda telah mengedit dan memperbarui catatan basis data, dan Anda ingin memberikan umpan balik kepada pengguna ketika mereka dialihkan 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 CodeAlat penyala.

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 direktori baru bernama sessions di application/views

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 flash sesi kita.

Buka aplikasi/config/routes.php

Tambahkan baris berikut

$route['flash_index'] = 'sessioncontroller';
$route['flash_message'] = 'sessioncontroller/flash_message';

Sekarang mari kita mulai server bawaan untuk 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 mengunduhnya. CodeGunakan Igniter, dan Anda dapat menggunakan nomor port apa pun yang tersedia di komputer Anda. Tidak perlu menggunakan port 3000.

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

Anda akan dialihkan ke halaman berikut. URL, 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 sedikit lebih canggih. Agar lebih sederhana, kita akan mensimulasikan otentikasi pengguna dan tidak melakukan implementasi sebenarnya dari verifikasi catatan pengguna di basis data dan kata sandi yang dikirimkan.

Mari kita mulai dengan rute-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 kita 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 sudah login, kemudian memberikan akses ke halaman tersebut. Jika pengguna belum login, maka pengguna akan dialihkan ke halaman login dengan pesan singkat.
  • public function login() {…} memuat tampilan login yang terletak di direktori sessions.
  • 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 dasbor setelah memanggil $this->check_auth('dashboard'); yang memverifikasi bahwa kunci sesi logged_in telah diatur.
  • 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

CodeTampilan Sesi Igniter

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:0
</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(3);?></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:0
</head>
<body>
<div class="container">
<div class="column">
<p><?=$this->session->userdata(1);?></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="password" 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 dikirim ke jalur autentikasi.

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:0
</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>

Demikianlah 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 mengunduhnya. CodeGunakan Igniter, dan Anda dapat menggunakan nomor port apa pun yang tersedia di komputer Anda. Tidak perlu menggunakan port 3000.

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

Anda akan dialihkan ke halaman berikut.

CodeTampilan Sesi Igniter

Klik tombol Masuk

Anda akan melihat hasil berikut ini

CodeTampilan Sesi Igniter

Setelah kita login, sekarang kita dapat melihat data sesi.

Pertanyaan Umum Demo Slot

Userdata akan tetap ada selama sesi berlangsung hingga Anda menghapusnya atau sesi berakhir. Flashdata adalah nilai sementara yang hanya bertahan hingga permintaan berikutnya dan kemudian dihapus secara otomatis, yang cocok untuk pesan sekali kirim.

Tempdata adalah data sesi dengan waktu kedaluwarsa yang telah ditentukan. Anda memanggil mark_as_temp() atau set_tempdata() dengan masa berlaku dalam detik, setelah itu CodeIgniter menghapus nilai tersebut secara otomatis, meskipun sesi masih aktif.

Secara default CodeIgniter menyimpan sesi menggunakan file di server. Anda dapat mengganti driver ke database, Redis, atau Memcached di file konfigurasi jika Anda membutuhkan penyimpanan bersama di beberapa server.

Ya. AI dapat meninjau konfigurasi sesi Anda untuk pengaturan yang lemah, merekomendasikan pembuatan ulang ID sesi setelah login, mengaktifkan enkripsi cookie, dan menggunakan cookie khusus HTTPS untuk mengurangi risiko pembajakan sesi.

Ya. Dari deskripsi singkat, AI dapat menghasilkan rute, pengontrol sesi, dan tampilan yang dilindungi. Selalu tambahkan verifikasi basis data dan hashing kata sandi yang sebenarnya, karena kerangka kerja AI sering menggunakan pemeriksaan simulasi.

Ringkaslah postingan ini dengan: