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.Definisi cookie Anda tidak benar-benar menggambarkan apa yang mereka lakukan. Cookie adalah pasangan nilai kunci yang ditetapkan melalui tajuk respons HTTP (
Set-Cookie
) oleh server dan disimpan oleh klien yang mendukungnya. Cookie dikirim kembali dengan setiap permintaan berikutnya (diCookie
header) untuk skema permintaan yang cocok, host, jalur, https sementara cookie belum kedaluwarsa. Anda dapat menyimpan apa pun yang Anda inginkan dalam cookie, dan memungkinkan Anda mendukung status pada protokol stateless HTTP.Contoh pertukaran cookie terlihat seperti ini:
Itu cukup benar. Sesi adalah data yang disimpan di sisi server tentang sesi pengguna saat ini. Agar ini berfungsi dalam protokol stateless seperti HTTP, pengguna harus mengirim ID sesi mereka dengan setiap permintaan, sehingga server dapat mengambil sesi yang benar untuk pengguna. ID sesi biasanya disimpan dalam cookie (lihat di atas). Ini bukan cookie yang berbeda dari cookie lainnya, datanya hanya ID server untuk sesi pengguna.
Itu cukup benar. Semuanya disimpan dalam token. Token dapat disimpan dalam cookie (lihat di atas). Ini merupakan alternatif untuk sesi server, dan ini berfungsi karena token ditandatangani dan diverifikasi oleh server, sehingga token tidak dapat diubah atau dipalsukan, dan aman untuk disimpan di sisi klien.
sumber