Pertanyaan utama:
Ambil aplikasi web khas Anda dengan login. Apakah itu menggunakan database untuk melacak pengguna yang saat ini masuk? (Berlawanan dengan mengingat semua pengguna. Saya yakin Anda memerlukan database untuk itu.)


Saya baru mulai mempelajari pengembangan web, dan bertanya-tanya tentang cara dunia nyata untuk mengingat pengguna saat masuk, dibandingkan dengan contoh simulasi seperti pada halaman buku masak Piramida ini. Saya belum dapat menemukan apa pun tentang cara Piramida melakukan ini, bukan dengan mencari atau dalam tutorial khusus otentikasi. Beberapa tutorial membandingkan userid dengan daftar hard-coded, yang lain dengan database yang tidak ditentukan lebih lanjut. Pertanyaan di atas adalah tebakan saya setelah membaca postingan ini tentang praktik otentikasi pengguna yang benar:

Jika Anda tidak terbiasa dengan data sesi, berikut cara kerjanya: Satu string yang dibuat secara acak disimpan dalam cookie yang kedaluwarsa dan digunakan untuk mereferensikan kumpulan data - data sesi - yang disimpan di server. Jika Anda menggunakan kerangka kerja MVC, ini tidak diragukan lagi sudah ditangani.

Akan keren jika seseorang bisa menjernihkan ini!


Agak terkait: Pertanyaan ini, tentang contoh Piramida yang sama - ia menanyakan seberapa aman metodenya, sementara pertanyaan saya adalah tentang memahami metodenya.

1
dasWesen 9 Agustus 2019, 20:10

1 menjawab

Jawaban Terbaik

...dan bertanya-tanya tentang cara dunia nyata untuk mengingat pengguna saat masuk.

Bukan server (atau bukan hanya server) yang perlu "mengingat pengguna saat masuk", tetapi juga klien yang perlu diingat.

Secara konseptual, ini bekerja seperti ini: setelah memverifikasi kredensial login, server mengembalikan sesuatu yang diingat klien. Klien kemudian perlu mengirim sesuatu itu dengan setiap permintaan ke server. Server, pada setiap permintaan, memeriksa apakah nilai yang diberikan sudah benar, cocok dengan pengguna di database, dll.

Dalam aplikasi web, mekanisme yang biasa untuk menyimpan dan mengirim "kunci" itu secara otomatis ke server adalah melalui Kuki HTTP - pada dasarnya, server mengirimkan header Set-Cookie dan browser menyimpan cookie dan mengirimkannya kembali ke header Cookie pada setiap permintaan.

Mengenai muatan cookie yang sebenarnya, ada dua pendekatan umum. Salah satu opsinya adalah saat masuk, server memulai "sesi" (yang mungkin berupa baris di beberapa tabel basis data). Server kemudian mengembalikan ID sesi, yang merupakan string acak yang tidak dapat ditebak, ke klien. Untuk memeriksa apakah sesi tertentu aktif, server perlu berkonsultasi dengan database pada setiap permintaan.

Opsi lain, yang biasa digunakan dalam tutorial Piramida, adalah otentikasi auth_tkt: server mengembalikan cookie yang berisi ID pengguna yang sebenarnya, ditandatangani secara kriptografis dengan rahasia sisi server. Saat klien mengirim cookie kembali, server dapat memverifikasi tanda tangan dan memastikan cookie tidak dirusak. Dalam hal ini, tidak ada apa pun di sisi server untuk melacak "semua pengguna yang masuk" dan tidak perlu berkonsultasi dengan database sesi.

2
Sergey 10 Agustus 2019, 20:56