Cookie: dalam versi awalnya, file teks dengan klien unik Id semua informasi lain yang diperlukan tentang klien (misalnya peran)
Cookie adalah tuple yang key-value
awalnya ditujukan untuk menyimpan data yang terkait dengan aktivitas klien. Retensi ini adalah apa yang kita ketahui sebagai sesi atau status aplikasi . Pada dasarnya, mereka dibuat untuk menahan keadaan aplikasi web; lebih khusus, keadaan di sisi klien. (1)
Cookie biasanya disetel oleh server melalui header respons ( Set-Cookie key=value
). Namun, mereka juga dapat diatur oleh klien. Misalnya, oleh DOM ( document.cookie
).
Satu hal penting yang perlu diketahui tentang cookie adalah mereka tidak mengidentifikasi pengguna. Mereka lebih mengaitkan data terna - client - server / path . (3)
Kami biasanya mengaitkan cookie dengan file karena pada hari-hari awal browser web mereka harus tetap mempertahankan cookie, menjadi file dukungan yang paling layak. Browser hari ini menyimpan cookie (antara lain) di penyimpanan lokal (DB yang disematkan).
Sesi: hanya id klien unik yang dikirim dalam file (juga disebut cookie), semua yang lain disimpan di server.
Menurut sesi, saya kira maksud Anda sesi server . Seperti yang saya komentari, sesi juga dapat diimplementasikan di sisi klien. Perbedaannya dengan sesi sisi klien adalah bahwa data disimpan di suatu tempat di sisi server. (2) Dalam skenario seperti itu, yang kita dapatkan adalah id sesi; dan kami mendapatkannya dalam bentuk cookie. Tanpa id sesi, server tidak akan dapat menghubungkan permintaan yang masuk dengan aktivitas klien sebelumnya. (3) Misalnya, pengguna yang diautentikasi, keranjang belanja, dll.
Dalam kasus apa pun, ID sesi tidak harus mengidentifikasi pengguna. Ini mengaitkan keadaan aplikasi tertentu dengan klien web. Sesi mungkin atau mungkin tidak mengandung data pengguna.
Dalam aplikasi terdistribusi, sesi harus serial untuk alasan yang jelas. Jika disimpan dalam memori, penyimpanan (komponen) dalam memori harus serial. Solusi umum adalah menyimpan sesi dalam file. Atau dalam DB NoSQL seperti Redis.
Mengenai keamanan. Sesi sisi server lebih aman daripada sisi klien. Klien lebih rentan terhadap ancaman karena pengguna biasanya tidak menyadari begitu banyak ancaman yang mereka hadapi. Setidaknya bukan pengguna biasa.
Di sisi lain, menyerang infrastruktur sisi server bukanlah hal yang sepele.
JWT: semuanya disimpan dalam token (yang juga bisa disimpan dalam file teks, yang juga disebut cookie)
Tidak juga. JWT menyimpan data terutama terkait dengan otorisasi dan penerbit token.
Meskipun mereka digunakan untuk mengandung ID pengguna (sub), kami menemukan JWT yang tidak mengidentifikasi pengguna yang diautentikasi. Misalnya, token untuk sesi tamu. Konten utama JWT adalah klaim ; item yang akan diperiksa oleh proses otorisasi.
Penting untuk diingat bahwa JWT bukan penyimpanan global . The sesi atau negara aplikasi masih harus disimpan di suatu tempat dan dikelola secara mandiri.
Mengenai JWT, ini sering disimpan sebagai cookie, meskipun mereka juga dapat disimpan di penyimpanan lokal. Selain itu, komunitas OWASP menganggap sessionStorage menjadi lebih aman untuk browser web. Namun, itu tergantung pada versi browser .
1: World Wide Web dimaksudkan untuk menjadi tanpa kewarganegaraan. Jika kita ingin membangun aplikasi sisi server tanpa kewarganegaraan, sesi harus disimpan di suatu tempat di sisi klien.
2: Mengubah aplikasi sisi server menjadi aplikasi stateful .
3: Klien sebagai aplikasi, bukan sebagai pengguna.
user_id
untuk pengguna yang login.