Çerezler, Local Storage ve IndexedDB: Bir Oturum Gerçekte Nedir

Oturum açmak üç ayrı yere yazar. Hangisinin ne olduğunu bilmek, oturumların bazı şeylerden neden sağ çıktığını, bazılarında neden bozulduğunu ve bir profili eşitlemenin neden üçünü de taşıması gerektiğini açıklar.
"Oturum açık olmak" tek bir şey gibi hissettirir. Aslında en az üç şeydir; üç ayrı yerde, üç farklı ömürle saklanır ve aradaki fark, oturumları makineler arasında taşırken karşılaşılan kafa karıştırıcı davranışların çoğunu açıklar.
Çerezler
Onları ayarlayan siteye giden her istekle otomatik olarak gönderilen küçük anahtar-değer çiftleridir. Oturum belirteci genellikle buradadır.
- Bir alan adına ve yola, bir de son kullanma tarihine bağlıdır.
- `Secure` bir çerez yalnızca HTTPS üzerinden gönderilir; `HttpOnly` bir çerez sayfa JavaScript'ine görünmez.
- Bir oturum çerezinin son kullanma tarihi yoktur ve tarayıcı kapandığında kaybolması amaçlanır.
Çerezler üçünün en küçüğü ve en çok yük taşıyanıdır. Onları kaybedin, oturumunuz kapanır.
Local Storage ve Session Storage
Sayfa JavaScript'i tarafından okunan ve yazılan, köken (origin) başına kapsamlanan dize anahtar-değer depolamasıdır. Bir istekle asla gönderilmez. Sayfanın bunu bilerek okuması gerekir.
Uygulamalar tercihleri, önbelleğe alınmış profil ayrıntılarını, özellik bayraklarını ve çoğu zaman bir yenileme belirtecini burada tutar. Local Storage temizlenene kadar kalır; Session Storage yalnızca sekme kadar yaşar.
IndexedDB
Tarayıcıdaki gerçek bir veritabanıdır: yapılandırılmış kayıtlar, dizinler, işlemler. Modern bir web uygulamasının önemli olan her şeyi tuttuğu yer burasıdır: önbelleğe alınmış mesaj geçmişleri, çevrimdışı kuyruklar, uçtan uca şifreli özellikler için şifreleme anahtarları.
Bir profil için bunun önemi
"Yalıtım"a kesin bir anlam kazandırır. İki profil, bu üçü ayrı olduğunda, ayrıca önbellek ve uzantı durumu da ayrı olduğunda yalıtılmıştır. Çerezleri yalıtıp IndexedDB'yi paylaşan bir araç, sorunun kolay üçte birini yalıtmıştır.
Bir profilin makineler arasında taşınması için de çıtayı belirler. Yalnızca çerezleri taşımak, bir oturumun biçimini özü olmadan yeniden üretir.
| Depo | Yazan | Tipik olarak tuttuğu |
|---|---|---|
| Çerezler | Sunucu ve sayfa betiği | Oturum belirteci, tercihler, izleme tanımlayıcıları |
| Local Storage | Sayfa betiği | Yenileme belirteçleri, arayüz durumu, önbelleğe alınmış profil ayrıntıları |
| Session Storage | Sayfa betiği | Sekme başına durum, sekme kapanınca atılır |
| IndexedDB | Sayfa betiği | Önbelleğe alınmış veriler, çevrimdışı kuyruklar, şifreleme anahtarları |
Bir oturumu kendi makineleriniz arasında taşımak
PowerOps, bir profil kapandığında çerezleri, Local Storage'ı ve IndexedDB'yi yakalar ve başka bir yerde açıldığında geri yükler. Her kategori, tüm çalışma alanı için ya da tek bir profil için bir anahtardır; böylece tam olarak niyet ettiğiniz kadarını taşıyabilirsiniz.
Bunun nasıl çalıştığına dair bilmeye değer iki özellik var:
- Anlık görüntü, geldiği makinede çalışma alanına ait bir anahtarla şifrelenir ve profili açan makinede çözülür. Bu uçtan uca şifreleme değildir: hizmet, diğer bilgisayarlarınızın alabilmesi için bu anahtarın bir kopyasını tutar.
- Bir profil aynı anda tek makinede açıktır. Açıkken bir kiralama (lease) tutar ve başka bir cihaza, oturumun birbirinden ayrışan iki kopyaya çatallanmasına izin verilmek yerine, hangi cihazın onu tuttuğu söylenir.
İkinci nokta kasıtlı bir sınırlamadır. İki makinenin bir oturumu bağımsız düzenlemesi, yarı geçerli iki oturum ve çoğu zaman her ikisinde de oturumu kapanmış bir hesap üretir. Bir çerez kavanozunun birleştirme çakışmasını çözmenin yolu yoktur.
Pratik çıkarım
Profilleri sonlandırmak yerine kapatın. Kapanışta yazma, oturumu taşınabilir kılan şeydir ve bu listedeki en ucuz alışkanlıktır.

