Yuvalar neden çerezler yerine kişileri tanımlamak için kullanılamaz?


17

Bireysel istemcileri tanımlamak için IP adreslerinin kullanımı ile ilgili başka bir soru soruldu . Bence bir IP adresinin neden yetersiz olduğunu anlıyorum. Ama daha fazla bilgiye sahip olan ve anladığım kadarıyla durumsal olan soket ne olacak? Bu bir çerez yerine potansiyel olarak kullanılamaz mı?


18
Soket durumu doludur, ancak web sayfasını indirdikten sonra http bağlantıyı açık tutmaz. Tüm web sayfası indirildikten yaklaşık 15 saniye sonra kapanır. bu durumu korumak için çerezlere ihtiyaç duymanızın tüm sebebidir
MTilsted

41
Bir soket bir veri parçası değildir. Hakkında gönderemezsiniz. Sorunuz mantıklı değil.
user207421

8
Neden isimler yerine fiilleri kullanamayacağınızı sormak gibi ...
user541686

2
@EJP: OP'nin soket nesnesi yerine (source_ip, source_port, target_ip, target_port) dörtlü anlamına geldiği varsayımı altında cevap verdim. Fakat yorumunuz da mantıklı.
Jörg W Mittag

Firebase'in çerezleri veya oturumu olmadan durum veya kullanıcı kimliğini yönetmek için çalışma şeklini taklit edebilirsiniz.
JeffO

Yanıtlar:


64

Bir soket bağlantıyı tanımlar . Çerezler genellikle bir kullanıcıyı tanımlamak için kullanılır . SE.SE'ye iki tarayıcı sekmesi açarsam, iki bağlantım ve dolayısıyla iki soketim olur. Ancak ayarlarımın her ikisinde de kalmasını istiyorum. (Aslında, tipik olarak, bir tarayıcı sayfa yükleme süresini hızlandırmak için bir sayfa için birden fazla yuva açar ; Çoğu tarayıcının sayfa başına 4 ila 10 yuva arasında varsayılan bir maksimum değere sahip olduğuna inanıyorum.)

Bunun tersi de olabilir: tarayıcı sekmemi kapatırsam, makinedeki başka bir kullanıcı SE.SE'ye bir tarayıcı sekmesi açabilir ve bu durumda aynı kaynak olan dörtlüğe (source_ip, source_port, target_ip, target_port) ulaşabilir. , tüm ayarlarımı alacak.


Http2 (ve http pipelining) ile muhtemelen SE'ye açık iki soketin olmayacağını belirtmek gerekir. Tarayıcınız aynı soketi yeniden kullanacak. Farklı tarayıcıların çalışır durumda olması gerekir.
Matthew Steeples

3
Önemsiz bir yerel onay Krom belirtir yapar onlar korumalı alan konum muhtemelen çünkü aralarındaki pay durumuna istemiyor - - ama her sekmenin soket kalıcı gibi görünüyor ve istekleri muhtemelen bu sekme içinde ardışık sekmenin başına açık bir soket tutun.
Yararsız

1
Ayrıca arka tarafta neler olup bittiğini bilmediğinizi de belirtmek gerekir. Birçok yük dengeleyici bir kullanıcı bağlantısını sonlandıracak ve daha sonra arka uç sunuculara kendi bağlantılarını açacak, yani tek bir soketi paylaşan birden fazla kullanıcınız olabilir.
Dan

@Useless IIRC SE, burada test etmeniz durumunda güncellemeleri (yeni sorular, düzenlemeler vb.) Almak için WebSockets veya uzun yoklama (geri dönüş) kullanır. Diğer siteler farklı davranabilir - bir soketi statik bir sitede süresiz olarak açık tutmanın pek bir anlamı yoktur.
Bob

Doğru, kontrol etmek için gerçekten statik bir site bulmam birkaç deneme aldı. Bunun için, Chrome sekmesinde başına birden fazla yuva açar ve hala sekmeler arasında bunları yeniden yok, ama does sekme yüklenmeden kez yakın onları. TIME_WAIT içinde çok uzun zaman geçirdikleri için kolayca görülebilirler.
Yararsız

20

TCP soketleri durumsal olacak şekilde tasarlanmıştır, bu nedenle genel olarak oturumları tanımlamak için kullanılırlar. SSH ve ftp gibi protokoller tam olarak bunu yapar.

HTTP durum bilgisi olmayan olarak tasarlanmıştır ve her bağlantı yalnızca karşıdan yüklenecek bir kaynakla ilişkilendirilir. Bir kaynak indirildikten sonra HTTP isteğinin sürdüğü TCP soketi kapatılır. Bunun asıl nedeni basitlikti. Ancak yan etki, modern web sitelerini çalıştıran HTTP sunucularının SSH veya ftp gibi soket tabanlı sunuculardan çok daha fazla kullanıcıyı işleyebilmesidir.

Bu yüzden soketler kullanılamaz çünkü HTTP web sayfasını indirdikten sonra soketi kapatacaktır.

Tabii ki, HTTP'nin kaynak başına soketi kapatacağını söylemek, işleri aşırı derecede basitleştiriyor çünkü HTTP, soket başına birden çok kaynak indirebilen boru hattı ve kalıcı bağlantılar gibi özelliklere sahip. Ama bu sadece optimizasyon. Her şey indirildikten sonra, tarayıcınız biraz zaman aşımından sonra soketi kapatacaktır.

HTTP başlangıçta HTML dosyalarını indirmek için basit bir protokol olarak tasarlanmıştır. Eski tarayıcılar ayrıca Gopher ve ftp gibi diğer protokollerden HTML dosyaları indirebilir. Bu nedenle, HTML dosyaları sadece basit metin dosyaları olduğu için HTTP'yi durumlu hale getirmenin bir nedeni yoktu.

Web formları tanıtıldıktan ve HTML sayfaları verileri sunucuya geri gönderdikten sonra oturumlara ihtiyaç duymaya başladı. Böylece durumları, durumsuz bir ağ katmanı üzerinden iletilen durum bilgisi olan bir aktarım katmanı üzerinden aktarılan durumsuz bir protokole yeniden sokmak için çerezler oluşturuldu. Yani tüm uygulama katmanları:

  • Ethernet, Wifi vb. = Vatansız
  • IP = vatansız
  • TCP = durum bilgisi olan
  • HTTP = durum bilgisi olmayan
  • HTTP + çerezleri = durum bilgisi olan

Bugünlerde web sayfanızdan sunucuya tek bir açık soket tutabilecek web soketlerimiz var. Bu yüzden websockets ile bir kullanıcıyı tanımlamak için tekrar yuvaları kullanabilirsiniz çünkü websocket kendi başına durumsaldır. Ancak çoğu durumda, ana html sayfası için web soketini başlatan javascript'i yükleyen bir çereze ihtiyacınız olacaktır.


4
"Modern web siteleri çalıştıran HTTP sunucuları, SSH veya ftp gibi soket tabanlı sunuculardan çok daha fazla kullanıcıyı işleyebilir" [alıntı gerekli]
el.pescado

6
@ el.pescado: Sadece mantıklı. Soket tabanlı sunucular canlı bir bağlantı sağladığından, soket tabanlı sunucular açabileceğiniz maksimum dosya tanımlayıcı sayısıyla sınırlıdır (ve bazı işletim sistemlerinde yuvalarda dosya tanımlayıcıları için sabit diskle rekabet eder). Bağlantıyı canlı tutmanız gerekmiyorsa, sınırınız sadece bant genişliğidir. Bant genişliği sınırının, bir bağlantıyı canlı tuttuğunuz veya korumadığınız aynı hava koşulları olduğunu unutmayın. Modern HTTP sunucuları saniyede milyonlarca isteği işleyebilir. Bir web sayfasını okurken milyonlarca soketi yukarıda tutmaları gerekiyorsa, sunucu ölür
slebetman

6
+1 "Çerezler, durumu bir durum bilgisi olmayan ağ katmanı üzerinden iletilen durum bilgisi olan bir aktarım katmanı üzerinden iletilen durum bilgisi olmayan bir protokole yeniden tanıtmak için oluşturuldu". Çok güzel
Monica'yı eski durumuna döndür - dirkk

Bu cevabı beğendim. Sorunun çekirdeğini doğrudan kesiyor.
Jim W

@slebetman HTTP sunucuları olan soket tabanlı. Onların hepsi. Tanım olarak. Ve kurabiye yapmak değil HTTP sunucuları durum bilgisi olun. Aslında tanım gereği, bu yüzden çerezler her zaman müşteri tarafından aktarılır.
Miles Rout
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.