CONTOH LOG MASUK DENGAN CFML
============================

Apa ini
-------
Satu fail .cfm yang mengendalikan daftar akaun, log masuk, kawasan ahli dan keluar.
Kata laluan disimpan sebagai cincang SHA-256 yang diulang 100,000 kali, bukan teks biasa.
Tutorial penuh: https://thalhah.my/blog/log-masuk-cfml-selamat

Fail dalam zip ini
------------------
log-masuk.cfm   aplikasi itu sendiri (satu fail)
Application.cfc tetapan aplikasi: sesi dihidupkan, DUA baris ini WAJIB betul
jadual.sql      skrip untuk mencipta jadual
BACA-DULU.txt   fail ini


CARA PASANG (4 langkah)
-----------------------
1. Jadual
   Jalankan jadual.sql dalam pangkalan data awak:
       mysql -u pengguna -p nama_pangkalan_data < jadual.sql

2. Fail
   Letakkan log-masuk.cfm dan Application.cfc dalam SATU folder yang sama,
   contohnya folder /demo/ dalam laman web Lucee awak.
   Application.cfc itu penting, kerana tanpa ia sesi tidak berfungsi.
   Kalau aplikasi awak sudah ada Application.cfc sendiri, jangan gantikan fail
   itu. Sebaliknya, salin tiga tetapan ini ke dalam Application.cfc awak:
       this.sessionManagement = true;
       this.setClientCookies  = true;
       this.sessionTimeout    = createTimeSpan( 0, 0, 30, 0 );

3. Datasource
   Di dalam Application.cfc, tukar blok bacaan fail kepada nama datasource awak,
   atau tulis terus:  this.datasource = "nama_datasource_awak";
   Kemudian di dalam log-masuk.cfm, pastikan <cfset DS = "demo"> sama dengan nama yang awak tetapkan di dalam Application.cfc.

4. Cuba
   Buka alamat folder itu, daftar satu akaun, kemudian log masuk.
   Kalau borang berjaya tetapi halaman hilang "kawasan ahli" selepas itu,
   punca paling biasa ialah setClientCookies = false. Sesi tidak boleh
   berfungsi tanpa kuki penanda sesi.


KALAU SESUATU TIDAK MENJADI
---------------------------
- "Datasource tidak dijumpai"  -> nama datasource dalam Application.cfc dan
                                  dalam <cfset DS = "..."> tidak padan.
- Log masuk berjaya tetapi terus      -> this.setClientCookies mesti true.
  keluar dari kawasan ahli
- Ralat 500 apabila mendaftar    -> panjang medan dalam jadual terlalu kecil,
                                    atau garam/cincang tidak disimpan bersama.
- Kata laluan betul tetapi ditolak -> periksa bilangan putaran yang tersimpan
                                      dalam baris itu. Ia mesti sama seperti
                                      semasa kata laluan dicipta.
- Sesi tamat terlalu cepat       -> naikkan this.sessionTimeout.


SEBELUM AWAK GUNA UNTUK ORANG SEBENAR
-------------------------------------
Contoh ini selamat dalam asasnya, tetapi ia belum sistem akaun yang lengkap.
Perkara yang perlu ditambah dahulu:
  1. Lupa kata laluan melalui e-mel (pautan sekali guna, tempoh singkat).
  2. Pengesahan emel semasa mendaftar.
  3. Catatan audit: siapa masuk, bila, dari mana.
  4. Log keluar automatik mengikut tempoh tidak aktif, dengan peringatan.
  5. Pengesahan dua langkah, kalau data itu sensitif.
Jangan sesekali mencatat kata laluan dalam fail log, walaupun semasa menyiasat masalah.


IZIN
----
Awak bebas menggunakan, mengubah dan mengedarkan kod ini, termasuk untuk kerja
berbayar. Tiada waranti diberikan.
