Javascript İle Yerel Depolama Kullanımı Nasıl Yapılır?

Javascript İle Yerel Depolama Kullanımı Nasıl Yapılır?
Javascript İle Yerel Depolama Kullanımı Nasıl Yapılır?

JavaScript ile Yerel Depolama Kullanımı Nasıl Yapılır?

Web geliştirme dünyasında, tarayıcı üzerinde veri saklama ihtiyacı modern uygulamaların temel taşlarından biridir. JavaScript ile yerel depolama (Local Storage), kullanıcı oturumlarını yönetmek, tercihlerini hatırlamak veya çevrimdışı çalışabilen uygulamalar geliştirmek için kullanılan en etkili yöntemlerden biridir. Bu rehberde, tarayıcı tabanlı veri depolama teknolojilerini en güncel standartlarla, adım adım öğreneceğiz.

Bu makale, web geliştirme temellerini bilen ancak tarayıcı içi veri kalıcılığını (persistence) profesyonel düzeyde yönetmek isteyen geliştiriciler için hazırlanmıştır. 2026 yılı standartlarına uygun olarak, verilerin nasıl güvenli bir şekilde yazılacağını, okunacağını ve yönetileceğini detaylı kod örnekleriyle inceleyeceğiz.

Ön Hazırlık ve Gereksinimler

JavaScript ile yerel depolama işlemleri yapabilmek için herhangi bir ek kütüphane kurulumuna veya sunucu tarafı yapılandırmasına ihtiyacınız yoktur. Modern tüm tarayıcılar (Chrome, Firefox, Edge, Safari) Web Storage API desteği ile gelir.

  • Modern Bir Tarayıcı: Güncel bir tarayıcı sürümü kullanmanız yeterlidir.
  • Kod Editörü: VS Code gibi bir editör ve tarayıcı "Geliştirici Araçları" (F12) hata ayıklama için gereklidir.
  • Temel Bilgi: JavaScript nesneleri ve JSON formatı hakkında temel bilgi sahibi olmanız süreci hızlandıracaktır.

Local Storage Nedir ve Nasıl Çalışır?

Local Storage, tarayıcıda anahtar-değer (key-value) çiftleri şeklinde veri saklamanızı sağlayan bir depolama alanıdır. Veriler, tarayıcı kapatılsa veya bilgisayar yeniden başlatılsa bile silinmez; kullanıcı tarayıcı geçmişini temizlemediği sürece kalıcıdır.

Veri yazma işlemi için setItem() metodunu kullanırız. Aşağıdaki örnekte, bir kullanıcının tema tercihini nasıl kaydedeceğimizi görelim:

// Tema tercihini yerel depolamaya kaydetme
localStorage.setItem('tema', 'koyu');

// Konsola doğrulama mesajı yazdıralım
console.log('Tema tercihi başarıyla kaydedildi.');

Bu kod bloğu, tarayıcının yerel depolama birimine 'tema' anahtarı ile 'koyu' değerini atar. Geliştirici araçlarında "Application" sekmesine giderek bu veriyi anlık olarak görebilirsiniz.

Adım Adım Veri Okuma ve Yönetme

Kaydettiğimiz veriye ihtiyaç duyduğumuzda getItem() metodunu kullanırız. Eğer anahtar bulunamazsa, JavaScript bize null değerini döndürür. Bu durum, veri kontrolü yaparken oldukça kritiktir.

// Yerel depolamadan veri okuma
const kaydedilenTema = localStorage.getItem('tema');

if (kaydedilenTema) {
    console.log('Mevcut tema: ' + kaydedilenTema);
} else {
    console.log('Henüz bir tema tercihi yapılmamış.');
}

Bu yöntem, kullanıcı sayfanızı tekrar ziyaret ettiğinde onun tercihlerini yüklemek için kullanılır. Uygulamanızın açılış fonksiyonunda bu kontrolü yaparak kullanıcı deneyimini iyileştirebilirsiniz.

Nesne ve Dizi Verilerini Depolama

Local Storage sadece metin (string) tabanlı verileri kabul eder. Bir JavaScript nesnesini veya dizisini doğrudan kaydetmeye çalışırsanız, tarayıcı bunu "[object Object]" olarak saklayacaktır. Bu sorunu aşmak için JSON.stringify() ve JSON.parse() yöntemlerini kullanmalıyız.

// Bir kullanıcı nesnesi tanımlayalım
const kullanici = {
    id: 101,
    isim: 'Ahmet',
    rol: 'admin'
};

// Nesneyi string formatına çevirip kaydedelim
localStorage.setItem('kullaniciBilgisi', JSON.stringify(kullanici));

// Veriyi geri okuyup nesneye dönüştürelim
const veri = localStorage.getItem('kullaniciBilgisi');
const kullaniciObjesi = JSON.parse(veri);

console.log(kullaniciObjesi.isim); // Çıktı: Ahmet

Bu yaklaşım, karmaşık veri yapılarını tarayıcıda saklamanızı sağlar. JSON formatı, veriyi taşınabilir ve okunabilir kılar.

Veri Silme ve Depolama Alanını Temizleme

Bazen belirli bir veriyi silmek veya tüm depolama alanını boşaltmak isteyebilirsiniz. Bunun için removeItem() ve clear() metotları kullanılır.

// Belirli bir anahtarı silme
localStorage.removeItem('tema');

// Tüm depolama alanını temizleme
localStorage.clear();

removeItem() sadece belirttiğiniz anahtarı silerken, clear() o alan adı (domain) için kaydedilmiş tüm verileri yok eder. Bu komutları kullanırken dikkatli olmalı, kullanıcı verilerini geri dönüşümsüz sildiğinizi unutmamalısınız.

Depolama Yöntemlerinin Karşılaştırması

Web projelerinde veri saklamak için birden fazla seçenek mevcuttur. Aşağıdaki tablo, bu yöntemlerin temel farklarını özetlemektedir:

Özellik Local Storage Session Storage Cookies
Kalıcılık Süresiz Sekme kapanana kadar Belirlenen süreye kadar
Kapasite ~5-10 MB ~5 MB 4 KB
Sunucuya Gönderim Hayır Hayır Evet (Her istekte)
Kritik Güvenlik Uyarısı: Local Storage, XSS (Cross-Site Scripting) saldırılarına karşı savunmasızdır. Kullanıcıların hassas bilgilerini (şifre, kredi kartı bilgisi, JWT token vb.) burada saklamayın. Eğer bir token saklamanız gerekiyorsa, bunu HttpOnly cookie içerisinde tutmak çok daha güvenlidir.

Sıkça Sorulan Sorular

Local Storage verileri tarayıcılar arası paylaşılır mı?

Hayır, veriler sadece kaydedildikleri tarayıcı ve domain (alan adı) ile sınırlıdır. Chrome'da kaydettiğiniz bir veriyi Firefox'ta göremezsiniz.

Depolama alanı dolduğunda ne olur?

Kapasite aşıldığında tarayıcı bir QuotaExceededError hatası fırlatır. Bu nedenle, büyük verileri kaydederken try-catch blokları kullanmak iyi bir pratiktir.

Local Storage senkron mu çalışır?

Evet, Local Storage işlemleri senkron (eşzamanlı) çalışır. Çok büyük verilerle işlem yaparken ana iş parçacığını (main thread) kilitleyebilir, bu yüzden veri miktarını optimize etmelisiniz.

Local Storage verilerini kullanıcı görebilir mi?

Evet, tarayıcının "Geliştirici Araçları" bölümüne erişimi olan herhangi bir kullanıcı, depolanan tüm verileri görebilir ve değiştirebilir. Bu yüzden verilerinize hiçbir zaman güvenmeyin.

Session Storage ile farkı nedir?

Session Storage, tarayıcı sekmesi kapatıldığında verileri otomatik olarak siler. Local Storage ise siz silene kadar orada kalır.

Local Storage ile Performans Optimizasyonu ve Veri Yönetimi

Local Storage, basit anahtar-değer çiftleri için oldukça hızlı olsa da, büyük veri setleriyle çalışırken tarayıcı performansını doğrudan etkileyebilir. Tarayıcının ana iş parçacığı (main thread) üzerinde çalıştığı için, çok büyük verilerin sürekli okunması veya yazılması arayüzde takılmalara (jank) neden olabilir. Performansı optimize etmek için şu stratejileri uygulayabilirsiniz:

  • Veri Parçalama: Büyük JSON objelerini tek bir anahtar altında saklamak yerine, mantıksal parçalara bölerek kaydedin.
  • Debouncing Kullanımı: Kullanıcı her tuşa bastığında Local Storage'a yazmak yerine, belirli bir süre bekleyip (debounce) işlemi gerçekleştiren fonksiyonlar kullanın.
  • Veri Sıkıştırma: Çok uzun metin verilerini saklamanız gerekiyorsa, lz-string gibi kütüphanelerle veriyi sıkıştırarak depolama alanından tasarruf edebilirsiniz.

Performans Ölçümü İçin Örnek Senaryo

Aşağıdaki kod bloğu, büyük bir nesneyi Local Storage'a yazarken geçen süreyi ölçmenize yardımcı olur:

const buyukVeri = Array.from({ length: 10000 }, (_, i) => ({ id: i, name: "Test Verisi " + i }));

console.time("Local Storage Yazma Süresi");
localStorage.setItem("performans_test", JSON.stringify(buyukVeri));
console.timeEnd("Local Storage Yazma Süresi");

console.time("Local Storage Okuma Süresi");
const veri = JSON.parse(localStorage.getItem("performans_test"));
console.timeEnd("Local Storage Okuma Süresi");

Hata Ayıklama ve Güvenli Depolama İpuçları

Local Storage ile çalışırken karşılaşılan en yaygın sorun, depolama sınırının aşılmasıdır (QuotaExceededError). Bu durum, özellikle kullanıcıların tarayıcı ayarlarından depolama alanını kısıtladığı veya çok fazla veri biriktiği durumlarda ortaya çıkar. Hataları yönetmek için her zaman try-catch bloklarını kullanmalısınız.

Güvenli Hata Yönetimi

Aşağıdaki yapı, veri yazma sırasında oluşabilecek hataları yakalayarak uygulamanızın çökmesini engeller:

function guvenliKaydet(key, value) {
    try {
        localStorage.setItem(key, JSON.stringify(value));
    } catch (e) {
        if (e.name === 'QuotaExceededError') {
            console.error("Depolama alanı doldu! Eski verileri temizleyin.");
            // Burada eski verileri silme veya kullanıcıyı uyarma mantığı çalıştırılabilir
        } else {
            console.error("Beklenmedik bir hata oluştu:", e);
        }
    }
}

// Kullanımı
guvenliKaydet("kullanici_ayarlari", { tema: "karanlik", bildirim: true });

İleri İpuçları:

  1. Namespace Kullanımı: Uygulamanızdaki farklı modüllerin aynı anahtar ismini kullanmaması için anahtarlarınızı uygulama_adi:modul_adi:key şeklinde isimlendirin.
  2. Veri Doğrulama: Local Storage'dan okuduğunuz verinin beklediğiniz formatta olup olmadığını kontrol etmek için Joi veya Zod gibi şema doğrulama kütüphanelerini kullanmayı düşünün.
  3. Storage Event Listener: Aynı tarayıcının farklı sekmeleri arasında veri senkronizasyonu sağlamak için window.addEventListener('storage', ...) olayını dinleyerek, bir sekmede değişen verinin diğer sekmelere anlık yansımasını sağlayabilirsiniz.

Sonuç

JavaScript ile yerel depolama kullanımı, modern web uygulamalarında kullanıcı deneyimini kişiselleştirmek için vazgeçilmez bir araçtır. Bu rehberde, verileri nasıl kaydedeceğinizi, okuyacağınızı ve güvenli bir şekilde yöneteceğinizi öğrendiniz. Unutmayın, depolama alanını verimli kullanmak ve güvenlik standartlarına uymak, profesyonel bir yazılım geliştiricinin ayırt edici özelliğidir.

Sorumluluk Reddi: Bu makaledeki kod örnekleri eğitim amaçlıdır. Uygulamalarınızda veri güvenliği için her zaman sunucu tarafı doğrulamalarını kullanmalı ve istemci tarafındaki (client-side) verilerin manipüle edilebileceğini varsayarak hareket etmelisiniz.

Bir sonraki adım olarak, IndexedDB teknolojisini araştırarak çok daha büyük ve yapılandırılmış verileri tarayıcıda nasıl saklayabileceğinizi öğrenebilirsiniz. İyi kodlamalar!

Bu yazıya tepkinizi paylaşın:
Selin Yılmaz

Sürdürülebilir yaşam ve pratik ev yönetimi üzerine içerik stratejileri geliştiriyorum. Yalın anlatımı ve uygulanabilirliği ön planda tutan bir yazı dilim var.

Yorumlar (16)

16
okuyucu bu yazı hakkında yorum yaptı. Siz de deneyiminizi paylaşarak diğer okuyuculara yardımcı olabilirsiniz.
Caner Yıldırım
Caner Yıldırım 31 Temmuz 2026

Eline sağlık Selin, tam aradığım konuydu. JSON parse ve stringify mevzusunu hep karıştırıyodum, çok net olmuş.

Selin Yılmaz
Selin Yılmaz 01 Ağustos 2026

Çok teşekkürler Caner, o kısım başlangıçta biraz kafa karıştırabiliyor ama pratik yaptıkça oturur.

Zeynep S.
Zeynep S. 01 Ağustos 2026

Local storage yerine neden session storage kullanmamalıyız? Bu konuda da bi yazı yazar mısın?

Selin Yılmaz
Selin Yılmaz 02 Ağustos 2026

Harika bir öneri Zeynep, bir sonraki yazımda ikisi arasındaki farklara detaylıca değineceğim.

Mertcan Öztürk
Mertcan Öztürk 02 Ağustos 2026

Abi çok güzel anlatmışsın da security kısmına da bi değinseydin keşke, sonuçta client tarafında tutuyoruz her şeyi.

Deniz Aras
Deniz Aras 03 Ağustos 2026

Aynen, hassas verileri saklamamak lazım zaten, local storage sadece basit ayarlar için ideal bence.

Burak Çelik
Burak Çelik 03 Ağustos 2026

Ya bende neden hata veriyo anlamadım, kodu kopyaladım ama çalışmadı. bi baksan olur mu?

Selin Yılmaz
Selin Yılmaz 04 Ağustos 2026

Tarayıcı konsolunda nasıl bir hata alıyorsun? Hata mesajını paylaşırsan yardımcı olabilirim.

Elifnur Gök
Elifnur Gök 04 Ağustos 2026

Harika özet olmuş, proje ödevimde çok işime yaradı. Teşekkürler!

Hakan Vural
Hakan Vural 04 Ağustos 2026

Selin hanım, local storage'a büyük veriler attığımızda tarayıcıyı yavaşlatma ihtimali var mı? Limitler ne kadar?

Selin Yılmaz
Selin Yılmaz 05 Ağustos 2026

Genelde 5-10 MB arası bir limit var Hakan bey, çok büyük veriler için IndexedDB daha sağlıklı bir tercih olur.

Oğuzhan Polat
Oğuzhan Polat 04 Ağustos 2026

Dili çok akıcı tutmuşsun, kod okumaktan sıkılan biri olarak bile keyifle okudum. Ellerin dert görmesin.

Seda Kaya
Seda Kaya 05 Ağustos 2026

Yazı güzel ama görsellerle biraz daha desteklenebilirdi sanki. Yine de eline sağlık.

Kaan Demir
Kaan Demir 06 Ağustos 2026

Bence kod blokları yeterince açıklayıcı olmuş, görselden ziyade kod mantığı önemli zaten.

Ceren M.
Ceren M. 06 Ağustos 2026

hocam harikasın, tam aradığım şeydi yaa, çok saol.

Fatih Terzi
Fatih Terzi 06 Ağustos 2026

Daha önce local storage hiç kullanmamıştım, bu yazı sayesinde ilk defa denedim ve gayet basitmiş. Teşekkürler.

Yorum Yaz