Apa perbedaan antara cookie sisi server dan cookie sisi klien?

120

Apa perbedaan antara membuat cookie di server dan di klien? Apakah ini disebut cookie sisi server dan cookie sisi klien? Adakah cara untuk membuat cookie yang hanya dapat dibaca di server atau di klien?

Rahul
sumber
15
Tidak ada yang namanya 'cookie sisi server' vs 'cookie sisi klien'. Hanya ada cookie, pasangan nama / nilai yang dikirim dalam header HTTP dengan permintaan dan tanggapan.
Dan Grossman
1
Mungkin mereferensikan variabel Sesi, yang menyimpan data di server. Biasanya masih ada pengenal sesi yang diadakan sebagai cookie sisi klien.
AndrewR
Kemungkinan besar, pertanyaan tersebut mengacu pada berbagai cara cookie dikodekan di sisi server (yaitu cara cookie dikodekan di header respons 'Cookie' dan 'Set-Cookie') dan di sisi klien (yaitu cara cookie dikodekan di header respons 'Cookie' dan 'Set-Cookie'). dikodekan dalam header permintaan 'Cookie' - variabel $ Path dan semua jazz itu). Lihat RFC 2109
Ophir Radnitz

Jawaban:

146

KUE HTTP

Cookies adalah pasangan kunci / nilai yang digunakan oleh situs web untuk menyimpan informasi negara di browser. Katakanlah Anda memiliki situs web (example.com), ketika browser meminta halaman web, situs web tersebut dapat mengirim cookie untuk menyimpan informasi di browser.

Contoh permintaan browser:

GET /index.html HTTP/1.1
Host: www.example.com

Contoh jawaban dari server:

HTTP/1.1 200 OK
Content-type: text/html
Set-Cookie: foo=10
Set-Cookie: bar=20; Expires=Fri, 30 Sep 2011 11:48:00 GMT
... rest  of the response

Di sini dua cookie foo = 10 dan bar = 20 disimpan di browser. Yang kedua akan berakhir pada 30 September. Dalam setiap permintaan berikutnya, browser akan mengirim cookie kembali ke server.

GET /spec.html HTTP/1.1
Host: www.example.com
Cookie: foo=10; bar=20
Accept: */*

SESI: Cookie sisi server

Cookie sisi server dikenal sebagai "sesi". Situs web dalam hal ini menyimpan satu cookie di browser yang berisi Pengenal Sesi unik. Informasi status (foo = 10 dan bar = 20 di atas) disimpan di server dan Session Identifier digunakan untuk mencocokkan permintaan dengan data yang disimpan di server.

Contoh penggunaan

Anda dapat menggunakan sesi dan cookie untuk menyimpan: data otentikasi, preferensi pengguna, konten bagan di situs web e-niaga, dll ...

Pro dan kontra

Di bawah ini pro dan kontra dari solusi. Ini yang pertama terlintas di benak saya, pasti ada yang lain.

Pro Cookie:

  • skalabilitas: semua data disimpan di browser sehingga setiap permintaan dapat melalui penyeimbang beban ke server web yang berbeda dan Anda memiliki semua informasi yang diperlukan untuk memenuhi permintaan;
  • mereka dapat diakses melalui javascript di browser;
  • tidak berada di server, mereka akan bertahan dari restart server;
  • RESTful: permintaan tidak bergantung pada status server

Kekurangan Cookie:

Pro Sesi:

  • umumnya lebih mudah digunakan, di PHP mungkin tidak banyak perbedaan.
  • penyimpanan tidak terbatas

Sesi Kekurangan:

  • lebih sulit untuk diukur
  • pada restart web server Anda bisa kehilangan semua sesi atau tidak tergantung pada implementasi
  • tidak RESTful
filippo
sumber
pro sesi: secure?
pengguna2167582
1
mengapa sesi lebih aman? Jika Anda mengirim cookie sesi melalui http, cookie dapat dibajak. Jika situs menggunakan https, keamanan harus sama selama Anda menggunakan cookie aman (dienkripsi, ditandatangani, dll ...)
filippo
1
Kekurangan cookie: membuat setiap permintaan lebih besar, berpotensi memengaruhi kinerja. Saya tidak tahu angkanya tetapi karena orang menggunakan domain tanpa cookie untuk hal-hal yang saya anggap tidak sepele.
maniexx
5
Jawaban yang sangat menyesatkan - sesi bukanlah cookie. en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#HTTP_session Anda dapat memiliki variabel sesi, bergantung pada cara manajemen sesi diimplementasikan di server. Anda biasanya memiliki satu atau lebih cookie yang terkait dengan manajemen sesi, dengan menahan pengenal sesi. Juga REST dan RESTful tidak ada hubungannya dengan cookie atau manajemen sesi - implementasi REST dan RESTful dapat memiliki sesi dan cookie.
Zlatin Zlatev
2
Lihat stackoverflow.com/questions/35054840/… Saya tidak mengatakan bahwa sesi biasanya tidak diterapkan dengan cookie, tetapi ada opsi lain untuk manajemen sesi, oleh karena itu adalah salah untuk membicarakan variabel sesi sebagai cookie sisi server. Saya juga mengacu pada JWT ketika saya mengatakan pada tahun 2017 di komentar di atas bahwa "implementasi REST dan RESTful dapat memiliki sesi dan cookie". Meskipun beberapa puritan mungkin berpendapat bahwa ini bukan cara yang tepat untuk mengimplementasikan REST API.
Zlatin Zlatev
57

Yang Anda maksud adalah perbedaan antara cookie Http Only dan bagian lawannya?

Http Only cookie tidak dapat diakses (dibaca dari atau ditulis ke) di sisi klien JavaScript, hanya sisi server. Jika bendera Hanya Http tidak disetel, atau cookie dibuat di JavaScript (sisi klien), cookie dapat dibaca dari dan ditulis ke dalam JavaScript (sisi klien) serta sisi server.

nikc.org
sumber
38

Semua cookie adalah klien dan server

Tidak ada perbedaan. Cookie biasa dapat diatur di sisi server atau sisi klien. Cookie 'klasik' akan dikirim kembali dengan setiap permintaan. Cookie yang ditetapkan oleh server, akan dikirim ke klien sebagai tanggapan. Server hanya mengirim cookie saat ditetapkan atau diubah secara eksplisit, sedangkan klien mengirim cookie pada setiap permintaan.

Tapi pada dasarnya itu adalah cookie yang sama.

Tapi, perilaku bisa berubah

Cookie pada dasarnya adalah sebuah name=valuepasangan, tetapi setelah nilainya dapat berupa sekumpulan atribut yang dipisahkan titik koma yang mempengaruhi perilaku cookie jika diterapkan oleh klien (atau server). Atribut tersebut dapat tentang masa pakai, konteks, dan berbagai pengaturan keamanan.

Hanya HTTP (bukan khusus server)

Salah satu atribut tersebut dapat disetel oleh server untuk menunjukkan bahwa ini adalah cookie khusus HTTP. Ini berarti cookie masih dikirim bolak-balik, tetapi tidak akan tersedia di JavaScript. Namun, perhatikan bahwa cookie itu masih ada! Ini hanya perlindungan bawaan di browser, tetapi jika seseorang menggunakan browser yang sangat lama seperti IE5, atau klien khusus, mereka benar-benar dapat membaca cookie!

Jadi sepertinya ada 'server cookies', tapi sebenarnya tidak ada. Cookie tersebut masih dikirim ke klien. Di klien, tidak ada cara untuk mencegah cookie dikirim ke server.

Alternatif untuk mencapai 'only-ness'

Jika Anda ingin menyimpan nilai hanya di server, atau hanya di klien, Anda memerlukan jenis penyimpanan lain, seperti file atau database di server, atau Penyimpanan Lokal di klien.

GolezTrol
sumber
hai, saya sangat baru dalam konsep ini dan memiliki beberapa keraguan. Maaf, pertanyaan saya mungkin terdengar konyol tapi saya akan tetap bertanya. Ada bantuan, sangat kami hargai - Dapatkah cookie, yang telah ditetapkan di sisi klien, dikirim ke domain mana pun? Maksud saya, apakah itu bukan ancaman keamanan? Juga, bagaimana cara kerjanya dengan klien non-browser, seperti API, dll?
Karan Chadha
1
Hai @KaranChadha, jika Anda memiliki pertanyaan, silakan ajukan pertanyaan formal menggunakan tombol 'Ajukan Pertanyaan' di bagian atas halaman. Utas komentar tentang pertanyaan berusia 7 tahun mungkin tidak akan menarik perhatian yang tepat. Menambahkan tautan ke Tanya Jawab ini, atau bahkan ke jawaban ini secara khusus, tentu saja tidak masalah. Anda dapat menggunakan tombol 'bagikan' di bagian bawah setiap posting untuk itu.
GolezTrol
Apakah ini benar? Cookie yang dibuat klien sepertinya tidak ditransfer. Jika melakukan document.cookie="foo=bar"diikuti fetch("/foobar", {credentials: 'include'} )tidak ada cookie yang dikirim berisi foo=bar. Baru saja mencoba kode itu langsung di situs ini menggunakan DevTools dan konsol.
oligofren
Ya itu benar, kata juga dokumennya , tetapi ada beberapa hal spesifik yang dapat menyebabkan ini, seperti atribut kedaluwarsa yang hilang.
GolezTrol
1
@MarinosAn Ya itu bisa. Tetapi jawaban saya agak singkat ketika menyangkut atribut yang mengubah perilaku cookie, jadi saya memperluasnya sekarang.
GolezTrol
4
  1. Ya, Anda dapat membuat cookie yang hanya dapat dibaca di sisi server. Ini disebut cookie "Hanya HTTP", seperti yang sudah dijelaskan di jawaban lain

  2. Tidak, tidak ada cara (saya tahu) untuk membuat "cookie" yang hanya dapat dibaca di sisi klien. Cookies dimaksudkan untuk memfasilitasi komunikasi klien-server.

  3. TAPI, jika Anda menginginkan sesuatu SEPERTI "client-only-cookies" ada jawaban sederhana: Gunakan "Penyimpanan Lokal".

Penyimpanan Lokal sebenarnya secara sintaksis lebih mudah digunakan daripada cookie. Ringkasan sederhana cookie vs. penyimpanan lokal dapat ditemukan di:

https://courses.cs.washington.edu/courses/cse154/12au/lectures/slides/lecture21-client-storage.shtml#slide8

Satu poin: Anda mungkin menggunakan cookie yang dibuat di JavaScript untuk menyimpan hal-hal terkait GUI yang hanya Anda perlukan di sisi klien. TAPI cookie dikirim ke server untuk SETIAP permintaan dibuat, itu menjadi bagian dari http-request header sehingga membuat permintaan berisi lebih banyak data dan dengan demikian lebih lambat untuk dikirim.

Jika halaman Anda memiliki 50 sumber daya seperti gambar dan file css serta skrip, maka cookie (biasanya) dikirim dengan setiap permintaan. Lebih lanjut tentang ini di Apakah setiap permintaan web mengirimkan cookie browser?

Penyimpanan lokal tidak memiliki kelemahan terkait transfer data, ia tidak mengirimkan data. Sangat bagus.

Panu Logic
sumber