# Session database

Session aplikasi memakai `DatabaseHandler`, tabel `pos_ci_sessions`, dan koneksi
database aplikasi (`DBGroup = null` mengikuti default group). Durasi session tetap
2 jam, regenerasi ID setiap 5 menit, dan `matchIP = false`.

Driver dan nama tabel ditetapkan kembali setelah CI membaca environment. Dengan
demikian, override `FileHandler`/path MAMP lama di `.env` tidak mengembalikan
penyimpanan ke file. Pengaturan session lain tetap dapat diatur melalui environment.

## Pemasangan di hosting

1. Pilih database aplikasi POS di phpMyAdmin dan jalankan
   [sql/2026-10-17_create_pos_ci_sessions.sql](sql/2026-10-17_create_pos_ci_sessions.sql).
   Bila `database.default.DBPrefix` terisi, tambahkan prefix yang sama pada nama
   tabel di SQL. Konfigurasi `savePath` tetap `pos_ci_sessions` karena driver
   database menambahkan prefix koneksi secara otomatis.
2. Upload `app/Config/Session.php` yang sudah diubah. Pada `.env` hosting, hapus
   override driver/path lama atau gunakan:

   ```ini
   session.driver = 'CodeIgniter\Session\Handlers\DatabaseHandler'
   session.savePath = 'pos_ci_sessions'
   ```

   Pertahankan koneksi `database.default.*` hosting yang sudah benar. Jika hosting
   menggunakan cache konfigurasi CI, bersihkan sesudah mengganti konfigurasi.
3. Login ulang. Session lama di file tidak dipindahkan ke tabel. Setelah mengakses
   aplikasi, periksa tanpa menampilkan isi session:

   ```sql
   SELECT id, ip_address, `timestamp`
   FROM pos_ci_sessions
   ORDER BY `timestamp` DESC
   LIMIT 10;
   ```

Kolom waktu menggunakan `TIMESTAMP` sesuai implementasi driver CI4 di proyek ini.
Indeks waktu mendukung garbage collection bawaan CI untuk menghapus session
kedaluwarsa. Akun database aplikasi membutuhkan SELECT, INSERT, UPDATE, DELETE;
driver MySQLi juga memakai GET_LOCK/RELEASE_LOCK untuk penguncian session.

SQL ini disediakan untuk dijalankan manual; tidak ada CREATE/ALTER tabel otomatis
pada request aplikasi. Migrasi tidak dijalankan terhadap database lokal maupun hosting
dalam perubahan ini. Kredensial database tidak diubah.

## Perbaikan error FileHandler/mkdir pada hosting

Log yang masih menyebut `FileHandler` dan `/Applications/MAMP/...` menunjukkan
hosting menjalankan konfigurasi lama. Setelah menjalankan SQL, upload versi terbaru
`app/Config/Session.php` ke folder aplikasi yang disebut log:
`/home/olen6374/public_html/pos2.kiosq.id/aplikasi/app/Config/Session.php`.
Sesuaikan juga override `.env` hosting seperti contoh di atas.

Jika cache konfigurasi aktif, hapus hanya file cache konfigurasi
`writable/cache/FactoriesCache_config` melalui File Manager hosting bila ada. Jika
PHP masih memakai kode lama, lakukan restart PHP/reset OPcache melalui panel hosting.
Tidak perlu membuat direktori `/Applications/MAMP/...` pada server.

Jika tersedia terminal, jalankan dari folder `aplikasi`:

```sh
php spark config:check Session
```

Hasil yang benar: driver `CodeIgniter\Session\Handlers\DatabaseHandler` dan
savePath `pos_ci_sessions`. Setelah itu buka aplikasi dan login ulang.
