FlightPHP Sesi - Pengelola Sesi Berbasis File yang Ringan
Ini adalah plugin pengelola sesi berbasis file yang ringan untuk Flight PHP Framework. Ini memberikan solusi sederhana namun kuat untuk mengelola sesi, dengan fitur seperti pembacaan sesi non-blocking, enkripsi opsional, fungsionalitas auto-commit, dan mode uji untuk pengembangan. Data sesi disimpan dalam file, menjadikannya ideal untuk aplikasi yang tidak memerlukan basis data.
Jika Anda ingin menggunakan basis data, periksa plugin ghostff/session dengan banyak fitur yang sama tetapi dengan backend basis data.
Kunjungi repositori Github untuk kode sumber lengkap dan detailnya.
Instalasi
Instal plugin melalui Composer:
composer require flightphp/session
Penggunaan Dasar
Berikut adalah contoh sederhana tentang cara menggunakan plugin flightphp/session
dalam aplikasi Flight Anda:
require 'vendor/autoload.php';
use flight\Session;
$app = Flight::app();
// Daftarkan layanan sesi
$app->register('session', Session::class);
// Contoh rute dengan penggunaan sesi
Flight::route('/login', function() {
$session = Flight::session();
$session->set('user_id', 123);
$session->set('username', 'johndoe');
$session->set('is_admin', false);
echo $session->get('username'); // Menghasilkan: johndoe
echo $session->get('preferences', 'default_theme'); // Menghasilkan: default_theme
if ($session->get('user_id')) {
Flight::json(['message' => 'Pengguna sudah login!', 'user_id' => $session->get('user_id')]);
}
});
Flight::route('/logout', function() {
$session = Flight::session();
$session->clear(); // Hapus semua data sesi
Flight::json(['message' => 'Berhasil keluar']);
});
Flight::start();
Poin Kunci
- Non-Blocking: Menggunakan
read_and_close
untuk memulai sesi secara default, mencegah masalah penguncian sesi. - Auto-Commit: Diaktifkan secara default, sehingga perubahan disimpan secara otomatis saat dimatikan kecuali dinonaktifkan.
- Penyimpanan File: Sesi disimpan di direktori temp sistem di bawah
/flight_sessions
secara default.
Konfigurasi
Anda dapat menyesuaikan pengelola sesi dengan melewatkan array opsi saat mendaftar:
$app->register('session', Session::class, [
'save_path' => '/custom/path/to/sessions', // Direktori untuk file sesi
'encryption_key' => 'a-secure-32-byte-key-here', // Aktifkan enkripsi (32 byte disarankan untuk AES-256-CBC)
'auto_commit' => false, // Nonaktifkan auto-commit untuk kontrol manual
'start_session' => true, // Mulai sesi secara otomatis (default: true)
'test_mode' => false // Aktifkan mode uji untuk pengembangan
]);
Opsi Konfigurasi
Opsi | Deskripsi | Nilai Default |
---|---|---|
save_path |
Direktori tempat file sesi disimpan | sys_get_temp_dir() . '/flight_sessions' |
encryption_key |
Kunci untuk enkripsi AES-256-CBC (opsional) | null (tidak ada enkripsi) |
auto_commit |
Simpan data sesi secara otomatis saat dimatikan | true |
start_session |
Mulai sesi secara otomatis | true |
test_mode |
Jalankan dalam mode uji tanpa mempengaruhi sesi PHP | false |
test_session_id |
ID sesi kustom untuk mode uji (opsional) | Dihasilkan secara acak jika tidak disetel |
Penggunaan Lanjut
Manual Commit
Jika Anda menonaktifkan auto-commit, Anda harus melakukan commit perubahan secara manual:
$app->register('session', Session::class, ['auto_commit' => false]);
Flight::route('/update', function() {
$session = Flight::session();
$session->set('key', 'value');
$session->commit(); // Simpan perubahan secara eksplisit
});
Keamanan Sesi dengan Enkripsi
Aktifkan enkripsi untuk data sensitif:
$app->register('session', Session::class, [
'encryption_key' => 'your-32-byte-secret-key-here'
]);
Flight::route('/secure', function() {
$session = Flight::session();
$session->set('credit_card', '4111-1111-1111-1111'); // Dienkripsi secara otomatis
echo $session->get('credit_card'); // Didekripsi saat diambil
});
Regenerasi Sesi
Regenerasi ID sesi untuk keamanan (misalnya, setelah login):
Flight::route('/post-login', function() {
$session = Flight::session();
$session->regenerate(); // ID baru, pertahankan data
// ATAU
$session->regenerate(true); // ID baru, hapus data lama
});
Contoh Middleware
Lindungi rute dengan otentikasi berbasis sesi:
Flight::route('/admin', function() {
Flight::json(['message' => 'Selamat datang di panel admin']);
})->addMiddleware(function() {
$session = Flight::session();
if (!$session->get('is_admin')) {
Flight::halt(403, 'Akses ditolak');
}
});
Ini hanyalah contoh sederhana tentang cara menggunakan ini dalam middleware. Untuk contoh yang lebih mendalam, lihat dokumentasi middleware.
Metode
Kelas Session
menyediakan metode ini:
set(string $key, $value)
: Menyimpan sebuah nilai dalam sesi.get(string $key, $default = null)
: Mengambil sebuah nilai, dengan nilai default opsional jika kunci tidak ada.delete(string $key)
: Menghapus kunci tertentu dari sesi.clear()
: Menghapus semua data sesi.commit()
: Menyimpan data sesi saat ini ke sistem file.id()
: Mengembalikan ID sesi saat ini.regenerate(bool $deleteOld = false)
: Regenerasi ID sesi, pilihan untuk menghapus data lama.
Semua metode kecuali get()
dan id()
mengembalikan instance Session
untuk chaining.
Mengapa Menggunakan Plugin Ini?
- Ringan: Tidak ada dependensi eksternal—hanya file.
- Non-Blocking: Menghindari penguncian sesi dengan
read_and_close
secara default. - Aman: Mendukung enkripsi AES-256-CBC untuk data sensitif.
- Fleksibel: Opsi auto-commit, mode uji, dan kontrol manual.
- Flight-Native: Dibangun khusus untuk framework Flight.
Detail Teknis
- Format Penyimpanan: File sesi diawali dengan
sess_
dan disimpan disave_path
yang dikonfigurasi. Data terenkripsi menggunakan awalanE
, data teks biasa menggunakanP
. - Enkripsi: Menggunakan AES-256-CBC dengan IV acak per penulisan sesi saat kunci
encryption_key
disediakan. - Pengumpulan Sampah: Mengimplementasikan
SessionHandlerInterface::gc()
PHP untuk membersihkan sesi yang telah kedaluwarsa.
Berkontribusi
Kontribusi sangat diterima! Fork repositori, lakukan perubahan Anda, dan kirim pull request. Laporkan bug atau sarankan fitur melalui pelacak masalah Github.
Lisensi
Plugin ini dilisensikan di bawah Lisensi MIT. Lihat repositori Github untuk detailnya.