Çerezler ve oturumlar


189

PHP'yi birkaç ay önce kullanmaya başladım. Web sitem için bir giriş sistemi oluşturmak adına, çerezleri ve oturumları ve bunların farklılıklarını okudum (çerezler kullanıcının tarayıcısında ve sunucudaki oturumlarda saklanır). O zaman, çerezleri tercih ettim (ve kim çerezleri sevmez ?!) ve dedim ki: "kimin umurunda? Sunucumda saklamakla iyi bir anlaşmam yok", bu yüzden devam ettim ve çerezleri kullandım lisans mezuniyet projem. Ancak, uygulamamın büyük bölümünü yaptıktan sonra, kullanıcının kimliğini saklama özel durumu için oturumların daha uygun olduğunu duydum. Bu yüzden jüri bana oturumlar yerine neden çerez kullandığınızı sorarsa ne söyleyeceğimi düşünmeye başladım. Sadece bu neden var (kullanıcı hakkında dahili bilgileri depolamak zorunda değilim). Bu yeterli mi? ya da bundan daha fazlası mı?
Lütfen Kullanıcı Kimliğini tutmak için çerez kullanmanın avantajlarından / dezavantajlarından bahseder misiniz?

StackOverflow'da hepiniz için teşekkürler!


2
Her iki yöntem de verileri depolar . Çerezler bunu müşteri tarafında, yani ziyaretçilerinizin cihazlarının depolanmasında yapar. Oturumlar, istemci tarafında yalnızca benzersiz bir kimlik ve sunucu tarafında tüm gerçek verileri sakladıkları için akıllı bir "uzantıdır". İstemcinin çerezinden benzersiz bir kimlik aldıklarında, sunucuya hangi verilerin yükleneceğini bilirler. Çoğu durumda, oturumlar ihtiyacınız olan şey olacaktır. Bu arada, her ikisini de github.com/delight-im/PHP-Cookie ile daha modern bir şekilde yönetebilirsiniz .
caw

Bir kenara, WordPress çekirdeği birkaç yıl önce oturumların kullanımını bıraktı ve şimdi sadece çerezleri kullanıyor . İlginç. Yük dengeli bir dizi sunucuda konuşlandırmayı kolaylaştırmak ve / veya oturum çöp toplama nedeniyle rastgele çıkışları azaltmak için bunu yapıp yapmadıklarını merak ediyorum.
Simon East

Yanıtlar:


230

Kavram, bir web ziyaretçisi için sayfa yüklerinde kalıcı verileri depolamaktır. Çerezler doğrudan istemcide saklar. Oturumlar, sunucu tarafında depolanan verilerle ilişkilendirmek için çerezi bir tür anahtar olarak kullanır.

Gerçek değerler istemciden gizlendiğinden ve verilerin ne zaman sona ereceğini ve geçersiz hale geleceğini kontrol ettiğiniz için oturumların kullanılması tercih edilir. Her şey çerezlere dayanıyorsa, bir kullanıcı (veya bilgisayar korsanı) çerez verilerini değiştirebilir ve ardından sitenize yönelik istekleri çalabilir.

Düzenleme: Basitlik dışında çerezleri kullanmanın herhangi bir avantajı olduğunu düşünmüyorum. Şuna bak ... Kullanıcının ID numarasını bilmek için herhangi bir nedeni var mı? Genellikle hayır diyebilirim, kullanıcının bu bilgilere ihtiyacı yoktur. Bilginin verilmesi, bilinmesi gerekliliği ile sınırlandırılmalıdır. Kullanıcı çerezini farklı bir kimliğe dönüştürürse uygulamanız nasıl yanıt verir? Bu bir güvenlik riski.

Seanslar öfkeden önce, temel olarak kendi uygulamam vardı. İstemcide benzersiz bir çerez değeri sakladım ve kalıcı verilerimi bu çerez değeri ile birlikte veritabanında sakladım. Sonra sayfa isteklerinde bu değerleri eşleştirdim ve müşteri ne olduğunu kontrol etmeden kalıcı verilerim vardı.


29
@JiminyCricket Bunun doğru olduğunu sanmıyorum ... öyleyse, hiç kimse oturum açmış olan kullanıcıyı depolamak için oturum değişkenlerini kullanmaz ve herkes kullanır. Bu büyük bir güvenlik riski olacaktır. Genellikle oturum kimliğinin istemci makinede bir çerez olarak depolandığından ve sunucu tarafı ile oturum verileriyle eşleştirildiğinden emin olabilirsiniz. Sunucu oturumları genellikle bir IP adresi üzerinden değil, bir çerez değeri aracılığıyla kontrol eder.
John M.

1
Kısa bir süre önce yalnızca çerezleri kullanmaya başladım, çünkü oturumlar aynı oturumdan yürütülmekte olan başka bir sayfa varsa, sayfaların yüklenmemesini sağlıyor, çünkü session_write_close();ihtiyacınız olan her bir sayfayı önceden yazmıyorsanız . Kendi benzersiz kimliğinizi yuvarlamak ve düz çerezlerle eşleştirmek o kadar da zor değildi ve tüm sayfaları güzel ve çabuk tutar.
Brian Leishman

Kimlik doğrulaması için oturum kullanmam gerektiğini düşünüyor musunuz? Güvenlik riski var mı? Bir bilgisayar korsanı oturum kimliğini değiştirmeye çalışırsa, sunucu nasıl yanıt verir (tahmin edilen oturum kimliğinin geçerli olduğunu varsayalım)?
O-BL

Oturumun ele geçirilmesi için oturumu ve ardından 2FA kullanın.
Zakir Sajib

120

Bu ikisi arasında ayrım yapmak için temel fikirler.

Oturum, toplantı, celse:

  1. IDU sunucuda depolanır (yani sunucu tarafı)
  2. Daha güvenli (1 nedeniyle)
  3. Süre sonu ayarlanamaz, kullanıcılar tarayıcıyı kapattığında oturum değişkenlerinin süresi dolar. (günümüzde php'de varsayılan olarak 24 dakika saklanmaktadır)

Kurabiye:

  1. IDU web tarayıcısında (yani istemci tarafında) saklanır
  2. Bilgisayar korsanları bilgilerinize ulaşıp ulaşabilecekleri için çok güvenli değil (1 nedeniyle)
  3. Son kullanma tarihi ayarlanabilir ( daha fazla bilgi için setcookies'e () bakın )

Hesaplama, ölçme, sorgulama vb. Değişkenler gibi kısa vadeli bilgileri / değerleri saklamanız gerektiğinde oturum tercih edilir.

Çerezler, kullanıcının hesabı gibi uzun vadeli bilgileri / değerleri depolamanız gerektiğinde tercih edilir (böylece bilgisayarı 2 gün boyunca kapattıklarında bile hesapları hala oturum açacaktır). Çoğu durumda kabul edilmediğinden, çerezler için birçok örnek düşünemiyorum.


6
Unutmayın: Bu iyi bir cevap DEĞİLDİR. Oldukça iyi başlıyor ama işleri karıştırıyor ve dezenformasyonla bitiyor. Bu bir oturum ile çerezlerin açıklaması değildir. Bu bir oturum ile oturum + oturum çerezi açıklamasıdır. Belirtilen nedenlerle tek başına çerezler tercih edilmez. Oturumlar + oturum çerezleri belirtilen nedenlerden dolayı tercih edilir.
markus

Başka bir hata, PHP yapılandırması yoluyla oturumun ömrünü etkilemenizdir.
markus

1
Oturumlar hala kullanıcı tarayıcısında bir çerez ayarlar, bu nedenle bu sunucu-istemci tarafı açıklaması doğru değildir
Zalaboza

oturumların sona ermesi herhangi bir uygulama tarafından kolayca ayarlanabilir. 3. nokta yanlış. Ayrıca, çerez veya oturumda depolanabilecek veri miktarını unuttun. Bu daha önemli bir nokta
saran3h

1
IDU ne anlama geliyor?
Simon East

45
SESSIONS ENDS WHEN USER CLOSES THEIR BROWSER,

COOKIES END DEPENDING ON THE LIFETIME YOU SET FOR IT. SO THEY CAN LAST FOR YEARS

Seçiminizdeki en büyük fark budur,

Kimliğin uzun süre hatırlanmasını istiyorsanız çerezleri kullanmanız gerekir; Aksi takdirde sadece bu ziyaret için web sitesinin kullanıcıyı tanımasını istiyorsanız oturumlar gitmek için bir yoldur.

Oturumlar php sunucunuzun oluşturacağı bir dosyada saklanır. Hangi dosyanın hangi kullanıcı için olduğunu hatırlamak için, php kullanıcının tarayıcısında bu oturum dosyası kimliğini tutan bir çerez ayarlayacaktır, böylece bir sonraki ziyaretlerinde php bu dosyayı okuyacak ve oturumu yeniden yükleyecektir.

Şimdi php varsayılan olarak oturumları her aralıkta temizler ve ayrıca oturum adlandırma kuralı otomatik olarak sona erer. Ayrıca tarayıcılar, tarayıcı kapatıldıktan veya geçmiş temizlendikten sonra oturum kimliğini tutan çerezi saklamaz.

Günümüzde tarayıcıların, LocalStorage, SessionStorage ve javascript kodunun sizi hatırlamak için bilgisayarınıza kaydetmek üzere kullanabileceği diğer webdb motorları gibi başka bir depolama motorunu da desteklediğini unutmayın. Örneğin, javascript konsolunu Facebook içinde açar ve "localStorage" yazarsanız, Facebook'un sizi çerezler olmadan hatırlamak için kullandığı tüm değişkenleri görürsünüz.


16
Aslında, varsayılan olarak bir oturum kullanıcı tarayıcısını kapatana kadar sürer, ancak bu php.ini dosyasında session.cookie_lifetime = 0 içindeki 0'ı oturumun bitmesini istediğiniz saniye sayısı olarak değiştirebilir veya session_set_cookie_params () kullanarak.
DOK

1
Daha fazla yararlı bilgi, böyle bir soru birçok cevap almak .. harika, tekrar teşekkürler DOK!
Nadjib Mami

1
Ayrıca oturum dosyalarının tek hata noktası oluşturabileceğini unutmayın. En küçük dos tarzı saldırı bile proxy, ip değiştirici veya zombiler aracılığıyla gerçekleştiğinde, sunucunuzun sabit diskinde veya SSD'sinde bir oturum dosyası oluşturulur. Eğer okuma yazar yetişemez eğer sitenizi aşağı gidecek.
Shawn E Carter

kimse clafiry olabilir: "OTURUMLAR KULLANICI VURDUĞUNU KAPATIRKEN" 1. 1. kullanıcı awya sayfadan giderse .. sonra tarayıcı kapatmadan geri gider. 2. Ya aynı siteyi gösteren birkaç tarayıcı penceresi / sekmesi varsa? iş yerinde bazı web uygulamaları bu durumda karıştırılır, ancak ne tür çerezler kullandıklarını bilmiyorum.
jcansell

1
@jcansell iyi, bir çerez çoklu sekmeler veya gezinme ile karıştırılmayacak, bu durumda büyük olasılıkla bu webapps javascript kullanarak verileri kaydetmek için localstorage / session storage kullandı
Zalaboza

20

#ID'yi giriş yapmış kullanıcıları tanımak için çerez olarak kaydettiğinizde, aslında kullanıcılarla ilişkili olmayan kullanıcılara veri gösterirsiniz. Buna ek olarak, bir üçüncü taraf tarayıcılarında rastgele kimlikler tanımlama bilgisi verileri olarak ayarlamaya çalışırsa, sunucuyu gerçekte olmadıklarında kullanıcı olduklarına ikna edebileceklerdir. Bu bir güvenlik eksikliği.

Çerezleri kullandınız ve dediğin gibi projenin çoğunu zaten tamamladınız. ayrıca çerezler uzun süre kalma ayrıcalığına sahipken, oturumlar daha hızlı bitiyor. Bu nedenle oturumlar bu durumda uygun değildir. Gerçekte birçok ünlü ve popüler web sitesi ve hizmet çerez kullanır ve uzun süre giriş yapmış olarak kalabilirsiniz. Ancak daha güvenli bir oturum açma işlemi oluşturmak için yöntemlerini nasıl kullanabilirsiniz?

fikir şudur: çerezleri kullanma şeklinize yardımcı olabilirsiniz: Oturum açmış kullanıcıları tanımak için kimlikler yerine rastgele anahtarlar kullanırsanız, önce birincil verilerinizi rastgele kullanıcılara sızdırmazsınız ve ikincisi, Rastgele Anahtar yeterince büyük, Herkesin bir anahtarı tahmin etmesi veya rastgele bir anahtar oluşturması daha zor olacaktır. örneğin Kullanıcının tarayıcısına bunun gibi 40 uzunluklu bir anahtar kaydedebilirsiniz: "KUYTYRFU7987gJHFJ543JHBJHCF5645UYTUYJH54657jguthfn" ve herkesin tam anahtar oluşturması ve başka biri gibi davranması daha az olasıdır.


1
Güzel açıklama. Kullanıcıları tanımak için jetonda GUID kullanıyorum.
Karthik

17

Kısa cevap

Önceliğe göre sıralanan kurallar:

  • Kural 1. Asla kullanıcı girişine güvenmeyin: çerezler güvenli değildir. Hassas veriler için oturumları kullanın.
  • Kural 2. Kullanıcı tarayıcıyı kapattığında kalıcı verilerin kalması gerekiyorsa, çerezleri kullanın.
  • Kural 3. Kullanıcı tarayıcıyı kapattığında kalıcı verilerin kalması gerekmiyorsa, oturumları kullanın.
  • Kural 4. Ayrıntılı cevabı okuyun!

Kaynak: https://www.lucidar.me/en/web-dev/sessions-or-cookies/


Ayrıntılı cevap

Kurabiye

  • Çerezler istemci tarafında (ziyaretçinin tarayıcısında) saklanır.
  • Çerezler güvenli değildir: Çerez içeriğini okumak ve yazmak oldukça kolaydır.
  • Çerezleri kullanırken, ziyaretçileri Avrupa yasalarına (GDPR) göre bildirmelisiniz.
  • Son kullanma tarihi ayarlanabilir, ancak kullanıcı veya tarayıcı bunu değiştirebilir.
  • Kullanıcılar (veya tarayıcı) çerez kullanımını reddedebilir (olarak ayarlanabilir).

Oturumlar

  • Oturumlar sunucu tarafında saklanır.
  • Oturumlarda çerezler kullanılır (aşağıya bakın).
  • Oturumlar çerezlerden daha güvenlidir ancak yenilmez değildir.
  • Son kullanma tarihi sunucu yapılandırmasında ayarlanır (örneğin php.ini).
  • Varsayılan son kullanma süresi 24 dakikadır veya tarayıcı kapatıldığında.
  • Kullanıcı yeni bir sayfayı yenilediğinde veya yüklediğinde son kullanma tarihi sıfırlanır.
  • Kullanıcılar (veya tarayıcı) çerez kullanımını, dolayısıyla oturumları reddedebilir (olarak ayarlanabilir).
  • Yasal olarak, çerezleri ziyaretçilere de bildirmeniz gerekir, ancak emsal eksikliği henüz net değildir.

Uygun seçim

Oturumlar bir çerez kullanır!Oturum verileri sunucu tarafında depolanır, ancak çerez tarafında istemci tarafında bir UID depolanır. Sunucunun belirli bir kullanıcıyı doğru oturum verileriyle eşleştirmesini sağlar. UID korumalıdır ve saldırıları zordur, ancak yenilmez değildir. Hassas eylemler için (e-postayı değiştirme veya şifreyi sıfırlama), oturumların ikisine de çerezlere güvenmeyin: eylemi onaylamak için kullanıcı şifresi isteyin.

Hassas veriler asla çerezlerde (e-postalar, şifreli şifreler, kişisel veriler ...) saklanmamalıdır. Verilerin yabancı bir bilgisayarda depolandığını ve bilgisayar özel değilse (sınıf veya halka açık bilgisayarlar) başka birinin çerez içeriğini okuyabileceğini unutmayın.

Beni hatırla verileri çerezlerde saklanmalıdır, aksi takdirde kullanıcı tarayıcıyı kapattığında veriler kaybolur. Ancak, 'beni hatırla' çerezine şifre veya kullanıcı kişisel verilerini kaydetmeyin. Kullanıcı verilerini veritabanında depolayın ve bu verileri bir çerezde saklanan şifreli bir kimlik / anahtar çifti ile bağlayın.

Önceki önerileri düşündükten sonra, aşağıdaki soru nihayet çerezler ve oturumlar arasında seçim yapmanıza yardımcı olan şeydir:

Kullanıcı tarayıcıyı kapattığında kalıcı veriler kalmalı mı?

  • Cevabınız evet ise , çerezleri kullanın .
  • Eğer cevap hayır , kullanmak oturumları .

13

Aslında, oturum ve çerezler her zaman ayrı şeyler değildir. Çoğu zaman, ancak her zaman değil, oturum çerezleri kullanır.

Buradaki diğer sorularda sorunuzun iyi yanıtları var. Sorunuz özellikle kullanıcının IDU'sunu (veya kimliğini) kaydetmekle ilgili olduğundan, bunun diğer soruların bir kopyası olduğunu düşünmüyorum, ancak cevapları size yardımcı olacaktır.

çerezler ve oturum

VS oturumu VS çerezleri önbellek?

Oturum ve Çerez arasındaki fark nedir?


10

Şahsen hem çerezleri hem de oturumu kullanıyorum.

Çerezler yalnızca kullanıcı "beni hatırla" onay kutusunu tıkladığında kullanılır . ve ayrıca çerezler şifrelenir ve verilerin sadece şifresi çözülür sunucuda . Birisi çerezleri düzenlemeye çalışırsa, decrypter'imiz bunu algılayabilir ve isteği reddedebilir.

Giriş bilgilerinin çerezlerde saklandığı birçok site gördüm , herkes sadece herhangi bir hesaba erişmek için çerezlerde kullanıcının kimliğini ve kullanıcı adını değiştirebilir .

Teşekkürler,


2

Oturum ve Çerez aynı değildir.

Web sayfalarındaki bilgileri saklamak için bir oturum kullanılır. Normalde web sayfalarının bu bilgileri depolayacak belleği yoktur. Ancak kullanarak gerekli bilgileri kaydedebiliriz.

Ancak Çerez kullanıcıları tanımlamak için kullanılır. Çerez kullanarak verileri saklayabiliriz. Kullanıcı web tarayıcısında depolanacak verinin küçük bir parçasıdır. Dolayısıyla, kullanıcı bir dahaki sefere tarayıcıya göz attığında önceki etkinlikleri almak için çerez veri bilgilerini sunucuya geri gönderir.

Kredi: Oturum ve Çerez


Kullanıcı çerezleri devre dışı bırakırsa ne olur? Çerez kullanıcıyı nasıl tanımlar?
SohailRajput

1

Oturumlar, çerezlerde olduğu gibi tek tek bilgileri saklamanızı sağlar, ancak veriler istemci yerine sunucuda depolanır.


0

Diğerlerinin söylediği gibi, Oturumlar akıllıdır ve bilgileri istemciden gizleme avantajına sahiptir.

Ancak Çerez'in hala en az bir avantajı vardır , Çerezlerinize Javascript'ten erişebilirsiniz (Örneğin ngCookies ). PHP oturumu ile PHP betiğinin dışında hiçbir yere erişemezsiniz.


1
Tabii ki değil. Elbette, oturum verisini döndüren komut dosyasına bazı ajax istekleri yoluyla erişebilirsiniz. Ama yapman gerektiğinden emin değilim.
l00k

0

Oturum'u seçeceğim, her şeyden önce oturum çerezlerden daha güvenli, çerezler istemci site verileri ve oturum sunucu site verileri. Çerezler bir kullanıcıyı tanımlamak için kullanılır, çünkü sunucumun kullanıcı bilgisayar tarayıcısıyla gömülü olduğu küçük kod parçalarıdır. Öte yandan Oturum size kimlik güvenliğini sağlamak için yardımcı olur, çünkü HTTP sunucusu durumu 192.168.0.1 olarak 765487cf34ert8ded… .. veya GET ve POST yöntemlerinin yardımıyla başka bir numara değiştirdiği için web sunucusu kim olduğunuzu bilmiyor. Oturum kullanıcı verilerini, kullanıcı kimliği bile birbiriyle eşleşemeyen benzersiz kimlik oturumunda depolar. Oturum tek kullanıcı bilgilerini bir uygulamanın tüm sayfalarında depolar. Çerezlerin süresi, setcookies () yardımıyla ayarlanırken oturum süresi sona ermediğinde, kullanıcı tarayıcıları kapattığında sona erer.


0

Oturum, sunucudaki çerez bilgileriyle ilişkili bir bilgi grubudur. PHP kullanıyorsanız oturumu kontrol edebilirsiniz. _ yol konumunu kaydedin ve aslında "oturumlara bakın". Çerez, istemcilere gönderilen ve istemcilere geri gönderilen bir veri snippetidir. Çerezler genellikle sunucuya hangi istemcinin hangi oturumu ele aldığını bildirdiği için oturumları kolaylaştırmak için kullanılır. Bunu yapmanın başka yolları da var (sorgu dizesi sihri vb.), Ancak çerezler bunun için en yaygın olanıdır.

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.