Sunucu tarafı tanımlama bilgisi ile istemci tarafı tanımlama bilgisi arasındaki fark nedir?


120

Sunucuda ve istemcide tanımlama bilgileri oluşturmak arasındaki fark nedir? Bunlara sunucu tarafı tanımlama bilgileri ve istemci tarafı tanımlama bilgileri mi deniyor? Yalnızca sunucuda veya istemcide okunabilen tanımlama bilgileri oluşturmanın bir yolu var mı?


15
'Sunucu tarafı çerezi' ile 'istemci tarafı çerezi' diye bir şey yoktur. Yalnızca istek ve yanıtlarla birlikte HTTP başlıklarında gönderilen tanımlama bilgileri, ad / değer çiftleri vardır.
Dan Grossman

1
Muhtemelen sunucuda veri tutan Oturum değişkenlerine referans veriyor. Genellikle, istemci tarafı tanımlama bilgisi olarak tutulan bir oturum tanımlayıcısı vardır.
AndrewR

Büyük olasılıkla, soru, çerezlerin sunucu tarafında (yani, 'Çerez' ve 'Set-Çerez' yanıt başlığında kodlanma biçimleri) ve istemci tarafında (yani, 'Cookie' istek başlığında kodlanmıştır - $ Path değişkeni ve tüm bu caz). Bkz. RFC 2109
Ophir Radnitz

Yanıtlar:


146

HTTP ÇEREZLERİ

Çerezler, web siteleri tarafından tarayıcıda durum bilgilerini depolamak için kullanılan anahtar / değer çiftleridir. Bir web siteniz (example.com) olduğunu varsayalım, tarayıcı bir web sayfası istediğinde, web sitesi tarayıcıda bilgi depolamak için tanımlama bilgileri gönderebilir.

Tarayıcı isteği örneği:

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

Sunucudan örnek cevap:

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

Burada, tarayıcıda foo = 10 ve bar = 20 olmak üzere iki çerez saklanır. İkincisi 30 Eylül'de sona erecek. Sonraki her istekte tarayıcı çerezleri sunucuya geri gönderecektir.

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

OTURUMLAR: Sunucu tarafı çerezleri

Sunucu tarafı tanımlama bilgileri "oturumlar" olarak bilinir. Bu durumda web sitesi, tarayıcıda benzersiz bir Oturum Tanımlayıcısı içeren tek bir çerez saklar. Durum bilgileri (foo = 10 ve bar = 20 yukarıda) sunucuda saklanır ve Oturum Tanımlayıcı, isteği sunucuda depolanan verilerle eşleştirmek için kullanılır.

Kullanım örnekleri

Aşağıdakileri depolamak için hem oturumları hem de çerezleri kullanabilirsiniz: kimlik doğrulama verileri, kullanıcı tercihleri, bir e-ticaret web sitesindeki bir grafiğin içeriği, vb.

Lehte ve aleyhte olanlar

Çözümlerin artıları ve eksileri aşağıda. Aklıma ilk gelenler, kesinlikle başkaları da var.

Çerez Artıları:

  • ölçeklenebilirlik: tüm veriler tarayıcıda saklanır, böylece her istek bir yük dengeleyiciden farklı web sunucularına gidebilir ve isteği yerine getirmek için gereken tüm bilgilere sahip olursunuz;
  • tarayıcıdaki javascript aracılığıyla erişilebilirler;
  • sunucuda olmadıklarında, sunucu yeniden başlatmalarından kurtulacaklar;
  • RESTful: istekler sunucu durumuna bağlı değildir

Çerez Eksileri:

Oturum Uzmanları:

  • kullanımı genellikle daha kolaydır, PHP'de muhtemelen pek bir fark yoktur.
  • sınırsız depolama

Oturum Eksileri:

  • ölçeklemesi daha zor
  • web sunucusu yeniden başlatıldığında uygulamaya bağlı olarak tüm oturumları kaybedebilir veya kaybedebilirsiniz
  • RESTful değil

seans artıları: secure?
user2167582

1
seanslar neden daha güvenli? Oturum çerezini http üzerinden gönderirseniz ele geçirilebilir. Site https kullanıyorsa, güvenli çerezler (şifreli, imzalı, vb.)
Kullandığınız

1
Çerezlerin eksileri: her bir isteği büyütür ve performansı potansiyel olarak etkiler. Rakamları bilmiyorum ama insanlar şeyler için çerezsiz alan adları kullandıklarından, bunun önemsiz olmadığını varsayıyorum.
maniexx

5
Büyük ölçüde yanıltıcı cevap - oturumlar tanımlama bilgileri değildir. en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#HTTP_session Oturum yönetiminin sunucuda uygulanma şekline bağlı olarak oturum değişkenlerine sahip olabilirsiniz. Oturum tanımlayıcısını tutarak genellikle oturum yönetimi ile ilgili bir veya daha fazla çereziniz olur. Ayrıca REST ve RESTful'un çerezler veya oturum yönetimi ile hiçbir ilgisi yoktur - REST ve RESTful uygulamaları oturumlara ve çerezlere sahip olabilir.
Zlatin Zlatev

2
Bkz stackoverflow.com/questions/35054840/... dolayısıyla sunucu tarafı çerez olarak oturum değişkenleri bahsetmek yanlıştır, ben oturum yönetimi için diğer seçenekler olduğunu oturumlar genellikle kurabiye uygulanmamış söyleyerek ama değildi. Ayrıca 2017 yılında yukarıdaki yorumda "REST ve RESTful uygulamalarının oturumları ve çerezleri olabilir" dediğimde JWT'den de bahsediyordum. Bazı sadık uzmanlar, bunun bir REST API'yi uygulamak için uygun bir yol olmadığını iddia edebilir.
Zlatin Zlatev

57

Muhtemelen Http Yalnızca tanımlama bilgileri ile bunların karşı kısımları arasındaki farkı mı kastediyorsunuz ?

Http İstemci tarafı JavaScript'te, yalnızca sunucu tarafında yalnızca tanımlama bilgilerine erişilemez (okunamaz veya yazılamaz). Yalnızca Http bayrağı ayarlanmamışsa veya çerez (istemci tarafı) JavaScript'te oluşturulmuşsa, çerez (istemci tarafı) JavaScript'in yanı sıra sunucu tarafında da okunabilir ve yazılabilir.


38

Tüm çerezler istemci ve sunucudur

Fark yok. Normal bir çerez, sunucu tarafında veya istemci tarafında ayarlanabilir. 'Klasik' çerez her istekle birlikte geri gönderilecektir. Sunucu tarafından ayarlanan bir tanımlama bilgisi istemciye yanıt olarak gönderilecektir. Sunucu, tanımlama bilgisini yalnızca açıkça ayarlandığında veya değiştirildiğinde gönderir, istemci ise tanımlama bilgisini her istek üzerine gönderir.

Ama esasen aynı çerez.

Ancak davranış değişebilir

Bir tanımlama temelde bir name=valueçift ama değeri sonra olabilir, yarı-kolon bir grup ayrılmış özelliklerini tanımlama bilgisi davranışını etkileyen ise o kadar Müşteriden (veya sunucu) ile uygulanmaktadır. Bu öznitelikler yaşam süresi, bağlam ve çeşitli güvenlik ayarları hakkında olabilir.

Yalnızca HTTP (yalnızca sunucu değildir)

Bu özniteliklerden biri, bir sunucu tarafından bunun yalnızca HTTP çerezi olduğunu belirtmek için ayarlanabilir. Bu, çerezin hala ileri geri gönderildiği, ancak JavaScript'te kullanılamayacağı anlamına gelir. Yine de, çerezin hala orada olduğunu unutmayın! Bu yalnızca tarayıcıda yerleşik bir korumadır, ancak biri IE5 gibi gülünç derecede eski bir tarayıcı veya bazı özel istemci kullanırsa, aslında çerezi okuyabilir!

Bu yüzden 'sunucu çerezleri' var gibi görünüyor, ama aslında yok. Bu çerezler hala müşteriye gönderilmektedir. İstemcide, sunucuya bir tanımlama bilgisinin gönderilmesini engellemenin bir yolu yoktur.

'Salt-lik' elde etmek için alternatifler

Bir değeri yalnızca sunucuda veya yalnızca istemcide depolamak istiyorsanız, sunucudaki bir dosya veya veritabanı veya istemcideki Yerel Depolama gibi başka tür bir depolamaya ihtiyacınız olacaktır.


merhaba, bu kavramlarda çok yeniyim ve bazı şüphelerim var. Üzgünüm, sorularım aptalca gelebilir ama yine de soracağım. Herhangi bir yardım, çok makbule geçer - İstemci tarafında ayarlanan bir çerez herhangi bir alana gönderilebilir mi? Demek istediğim, bu bir güvenlik tehdidi değil mi? Ayrıca, API'ler vb. Gibi tarayıcı dışı istemcilerle nasıl çalışır?
Karan Chadha

1
Merhaba @KaranChadha, bir sorunuz varsa, lütfen sayfanın üst kısmındaki 'Soru Sor' düğmesini kullanarak resmi bir soru olarak sorun. 7 yıllık bir soruyla ilgili bir yorum dizisi muhtemelen ona doğru miktarda dikkat çekmeyecektir. Bu Soru-Cevap'a veya hatta özellikle bu yanıta bir bağlantı eklemek elbette iyidir. Bunun için her gönderinin altındaki 'paylaş' düğmesini kullanabilirsiniz.
GolezTrol

Bu doğru mu? Müşteri tarafından oluşturulan çerezler aktarılmıyor. Yapılıyorsa document.cookie="foo=bar"ardından gelen fetch("/foobar", {credentials: 'include'} )herhangi bir çerez gönderilmez foo=bar. DevTools ve konsolu kullanarak bu kodu doğrudan bu sitede denedim.
oligofren

Evet, doğru, dokümanlar da diyor , ancak buna neden olabilecek bazı ayrıntılar var, örneğin eksik sona erme özelliği gibi.
GolezTrol

1
@MarinosAn Evet yapabilir. Ancak, çerezin davranışını değiştiren niteliklere gelince cevabım biraz kısaydı, bu yüzden şimdi biraz genişlettim.
GolezTrol

4
  1. Evet, yalnızca sunucu tarafında okunabilen tanımlama bilgileri oluşturabilirsiniz. Diğer yanıtlarda da açıklandığı gibi bunlara "Yalnızca HTTP" çerezleri denir.

  2. Hayır, sadece istemci tarafında okunabilen "çerezler" oluşturmanın (bildiğim) bir yolu yok. Çerezler, istemci-sunucu iletişimini kolaylaştırmak içindir.

  3. AMA, "yalnızca istemci çerezleri" GİBİ bir şey istiyorsanız, basit bir yanıt vardır: "Yerel Depolama" yı kullanın.

Yerel Depolama, aslında sözdizimsel olarak tanımlama bilgilerinden daha basittir. Tanımlama bilgilerinin ve yerel depolamanın iyi ve basit bir özeti şu adreste bulunabilir:

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

Bir nokta: Yalnızca istemci tarafında ihtiyaç duyduğunuz GUI ile ilgili şeyleri depolamak için JavaScript'te oluşturulan çerezleri kullanabilirsiniz. ANCAK çerez, yapılan HER istek için sunucuya gönderilir, http-istek başlıklarının bir parçası haline gelir ve böylece isteğin daha fazla veri içermesine ve dolayısıyla gönderilmesi daha yavaş olmasına neden olur.

Sayfanızda resimler, css dosyaları ve komut dosyaları gibi 50 kaynak varsa, çerez (tipik olarak) her istekle birlikte gönderilir. Bununla ilgili daha fazla bilgi için Her web isteği tarayıcı çerezlerini gönderir mi?

Yerel depolama, veri aktarımıyla ilgili bu dezavantajlara sahip değildir, veri göndermez. Bu harika.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.