{"id":34180,"date":"2025-11-12T10:31:08","date_gmt":"2025-11-12T07:31:08","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/localstorage-nedir-ve-neden-her-frontend-gelistiricisi-bilmeli\/"},"modified":"2025-11-12T10:31:08","modified_gmt":"2025-11-12T07:31:08","slug":"localstorage-nedir-ve-neden-her-frontend-gelistiricisi-bilmeli","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/localstorage-nedir-ve-neden-her-frontend-gelistiricisi-bilmeli\/","title":{"rendered":"localStorage Nedir ve Neden Her Frontend Geli\u015ftiricisi Bilmeli?"},"content":{"rendered":"<div>localStorage: Taray\u0131c\u0131da Veri Saklaman\u0131n En Basit Yolu<\/div>\n<p>Web uygulamalar\u0131n\u0131zda kullan\u0131c\u0131 deneyimini zenginle\u015ftirmek, performans\u0131 art\u0131rmak veya basit veri saklama ihtiya\u00e7lar\u0131n\u0131z\u0131 kar\u015f\u0131lamak istedi\u011finizde akl\u0131n\u0131za ilk ne gelir? Kullan\u0131c\u0131 tercihlerini hat\u0131rlamak, sepet bilgilerini kaydetmek veya \u00e7evrimd\u0131\u015f\u0131 kullan\u0131m i\u00e7in baz\u0131 verileri depolamak, modern web uygulamalar\u0131n\u0131n olmazsa olmaz\u0131d\u0131r. \u0130\u015fte tam bu noktada, <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/API\/Window\/localStorage\" target=\"_blank\" rel=\"noopener\"><code>localStorage<\/code><\/a> devreye giriyor. Bir\u00e7ok front-end geli\u015ftiricisinin g\u00f6z ard\u0131 etmemesi gereken, basit ancak g\u00fc\u00e7l\u00fc bu taray\u0131c\u0131 \u00f6zelli\u011fi, kullan\u0131c\u0131 tarafl\u0131 veri depolama konusunda en eri\u015filebilir \u00e7\u00f6z\u00fcmlerden biridir. Bu makale, <code>localStorage<\/code>&#8216;\u0131n ne oldu\u011fundan, nas\u0131l kullan\u0131ld\u0131\u011f\u0131na, potansiyel tuzaklar\u0131na ve en iyi uygulamalar\u0131na kadar her \u015feyi ad\u0131m ad\u0131m a\u00e7\u0131klayarak sizi bu konuda usta bir hale getirmeyi hedefliyor. Gelin, taray\u0131c\u0131da veri saklaman\u0131n bu etkili yolunu derinlemesine ke\u015ffedelim.<\/p>\n<p>Modern web geli\u015ftirmenin temel ta\u015flar\u0131ndan biri, kullan\u0131c\u0131 etkile\u015fimlerini kal\u0131c\u0131 hale getirmektir. Kullan\u0131c\u0131 bir web sitesini ziyaret etti\u011finde, ayarlar\u0131n\u0131 kaydetti\u011finde veya bir \u00fcr\u00fcn\u00fc sepete ekledi\u011finde, bu bilgilerin taray\u0131c\u0131 kapat\u0131lsa veya sayfa yenilense bile korunmas\u0131 beklenir. \u0130\u015fte <code>localStorage<\/code>, tam da bu ihtiyaca cevap veren, taray\u0131c\u0131da kal\u0131c\u0131 olarak veri depolaman\u0131za olanak tan\u0131yan bir istemci tarafl\u0131 depolama mekanizmas\u0131d\u0131r. Basit\u00e7e ifade etmek gerekirse, web sitelerinin kullan\u0131c\u0131lar\u0131n bilgisayarlar\u0131nda k\u00fc\u00e7\u00fck miktarda veri saklamas\u0131na izin veren bir JavaScript API&#8217;sidir.<\/p>\n<p>Peki, <code>localStorage<\/code>&#8216;\u0131 bu kadar \u00f6nemli yapan nedir? \u00d6ncelikle, depolanan veriler kal\u0131c\u0131d\u0131r. Yani kullan\u0131c\u0131 taray\u0131c\u0131s\u0131n\u0131 kapatsa, bilgisayar\u0131n\u0131 yeniden ba\u015flatsa veya internet ba\u011flant\u0131s\u0131 olmasa bile veriler kaybolmaz. Bu \u00f6zellik, <code>sessionStorage<\/code>&#8216;dan farkl\u0131d\u0131r; <code>sessionStorage<\/code>, oturum sona erdi\u011finde (taray\u0131c\u0131 kapat\u0131ld\u0131\u011f\u0131nda) verileri siler. Ayr\u0131ca, <code>localStorage<\/code>&#8216;\u0131n depolama alan\u0131 olduk\u00e7a c\u00f6merttir. Taray\u0131c\u0131ya ve i\u015fletim sistemine ba\u011fl\u0131 olarak 5 MB ile 10 MB aras\u0131nda veri depolayabilir, ki bu bir\u00e7ok basit uygulama i\u00e7in fazlas\u0131yla yeterlidir. Bu kapasite, \u00f6zellikle k\u00fc\u00e7\u00fck kullan\u0131c\u0131 tercihleri, sepet bilgileri veya \u00e7evrimd\u0131\u015f\u0131 eri\u015fim i\u00e7in \u00f6nbellek verileri gibi senaryolar i\u00e7in idealdir.<\/p>\n<p><code>localStorage<\/code>&#8216;\u0131n sa\u011flad\u0131\u011f\u0131 bir di\u011fer avantaj, kullan\u0131m kolayl\u0131\u011f\u0131d\u0131r. Anahtar-de\u011fer \u00e7iftleri \u015feklinde \u00e7al\u0131\u015f\u0131r ve veriye eri\u015fmek, de\u011fi\u015ftirmek veya silmek i\u00e7in son derece basit JavaScript metotlar\u0131 sunar. Karma\u015f\u0131k bir veritaban\u0131 kurulumuna veya sunucu taraf\u0131nda ek bir i\u015fleme gerek kalmadan, do\u011frudan istemci taraf\u0131nda \u00e7al\u0131\u015f\u0131r. Bu, geli\u015ftirme s\u00fcrecini h\u0131zland\u0131r\u0131r ve sunucu y\u00fck\u00fcn\u00fc azalt\u0131r. Ayr\u0131ca, t\u00fcm modern taray\u0131c\u0131lar taraf\u0131ndan geni\u015f \u00e7apta desteklenir, bu da uyumluluk sorunlar\u0131 ya\u015fama olas\u0131l\u0131\u011f\u0131n\u0131z\u0131 minimize eder.<\/p>\n<div class=\"uzman-ipucu\">\n  Uzman \u0130pucu: <code>localStorage<\/code>, senkron (synchronous) bir API&#8217;dir. Bu, her i\u015flemin ana i\u015f par\u00e7ac\u0131\u011f\u0131n\u0131 bloke etti\u011fi anlam\u0131na gelir. \u00c7ok b\u00fcy\u00fck veri setlerini depolarken veya s\u0131k s\u0131k eri\u015firken dikkatli olunmal\u0131, \u00e7\u00fcnk\u00fc bu durum uygulaman\u0131z\u0131n performans\u0131n\u0131 olumsuz etkileyebilir.\n<\/div>\n<p><code>localStorage<\/code>, ayn\u0131 zamanda, web performans\u0131n\u0131 art\u0131rmak i\u00e7in de kullan\u0131labilir. \u00d6rne\u011fin, s\u0131k de\u011fi\u015fmeyen statik i\u00e7erikleri (CSS temalar\u0131, dil paketleri) veya kullan\u0131c\u0131n\u0131n daha \u00f6nceki etkile\u015fimlerinden kaynaklanan bilgileri depolayarak, her sayfa y\u00fcklemesinde sunucudan veri \u00e7ekme ihtiyac\u0131n\u0131 azaltabilirsiniz. Bu da sayfa y\u00fckleme s\u00fcrelerini \u00f6nemli \u00f6l\u00e7\u00fcde h\u0131zland\u0131r\u0131r ve genel kullan\u0131c\u0131 deneyimini iyile\u015ftirir.<\/p>\n<p>Ancak, <code>localStorage<\/code>&#8216;\u0131n baz\u0131 k\u0131s\u0131tlamalar\u0131 ve dikkat edilmesi gereken noktalar\u0131 da vard\u0131r. \u00d6rne\u011fin, sadece string (metin) verileri saklayabilir. Karma\u015f\u0131k JavaScript objelerini depolamak istedi\u011finizde, onlar\u0131 JSON format\u0131na d\u00f6n\u00fc\u015ft\u00fcrmeniz ve geri d\u00f6n\u00fc\u015ft\u00fcrmeniz gerekir. Ayr\u0131ca, t\u00fcm taray\u0131c\u0131 depolama mekanizmalar\u0131 gibi, <code>localStorage<\/code> da <a href=\"https:\/\/owasp.org\/www-community\/attacks\/xss\/\" target=\"_blank\" rel=\"noopener\">XSS (Cross-Site Scripting)<\/a> sald\u0131r\u0131lar\u0131na kar\u015f\u0131 savunmas\u0131z olabilir. Bu nedenle, hassas bilgileri (\u015fifreler, kredi kart\u0131 numaralar\u0131 gibi) <code>localStorage<\/code>&#8216;da saklamaktan ka\u00e7\u0131nmak hayati \u00f6nem ta\u015f\u0131r. Bu g\u00fcvenlik a\u00e7\u0131klar\u0131 ve performans hususlar\u0131, do\u011fru kullan\u0131m senaryolar\u0131n\u0131 belirlemede kritik rol oynar.<\/p>\n<h3>localStorage, sessionStorage ve Cookies Aras\u0131ndaki Farklar Nelerdir?<\/h3>\n<p>Taray\u0131c\u0131da veri depolaman\u0131n farkl\u0131 yollar\u0131 vard\u0131r ve her birinin kendine \u00f6zg\u00fc avantajlar\u0131 ve dezavantajlar\u0131 bulunur. <code>localStorage<\/code>&#8216;\u0131 daha iyi anlamak i\u00e7in, onu di\u011fer pop\u00fcler depolama y\u00f6ntemleri olan <code>sessionStorage<\/code> ve <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/HTTP\/Cookies\" target=\"_blank\" rel=\"noopener\">cookies (\u00e7erezler)<\/a> ile kar\u015f\u0131la\u015ft\u0131rmak faydal\u0131 olacakt\u0131r:<\/p>\n<table border=\"1\">\n<thead>\n<tr>\n<th>\u00d6zellik<\/th>\n<th>localStorage<\/th>\n<th>sessionStorage<\/th>\n<th>Cookies (\u00c7erezler)<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Kal\u0131c\u0131l\u0131k<\/td>\n<td>Kal\u0131c\u0131 (taray\u0131c\u0131 kapat\u0131lsa da silinmez)<\/td>\n<td>Oturum bazl\u0131 (taray\u0131c\u0131 kapat\u0131ld\u0131\u011f\u0131nda silinir)<\/td>\n<td>S\u00fcre sonuna ba\u011fl\u0131 (son kullanma tarihi ile belirlenir)<\/td>\n<\/tr>\n<tr>\n<td>Kapasite<\/td>\n<td>5 MB &#8211; 10 MB aras\u0131<\/td>\n<td>5 MB &#8211; 10 MB aras\u0131<\/td>\n<td>4 KB (\u00e7ok daha k\u00fc\u00e7\u00fck)<\/td>\n<\/tr>\n<tr>\n<td>Eri\u015fim<\/td>\n<td>Sadece JavaScript<\/td>\n<td>Sadece JavaScript<\/td>\n<td>Hem JavaScript hem de HTTP istekleriyle sunucu taraf\u0131na g\u00f6nderilir<\/td>\n<\/tr>\n<tr>\n<td>Veri Tipi<\/td>\n<td>Sadece string (JSON ile objeler)<\/td>\n<td>Sadece string (JSON ile objeler)<\/td>\n<td>Sadece string<\/td>\n<\/tr>\n<tr>\n<td>G\u00fcvenlik<\/td>\n<td>XSS sald\u0131r\u0131lar\u0131na kar\u015f\u0131 savunmas\u0131z<\/td>\n<td>XSS sald\u0131r\u0131lar\u0131na kar\u015f\u0131 savunmas\u0131z<\/td>\n<td>XSS sald\u0131r\u0131lar\u0131na kar\u015f\u0131 savunmas\u0131z (HTTPOnly ile azalt\u0131labilir)<\/td>\n<\/tr>\n<tr>\n<td>Kullan\u0131m Alan\u0131<\/td>\n<td>Kullan\u0131c\u0131 tercihleri, \u00e7evrimd\u0131\u015f\u0131 \u00f6nbellek, sepet bilgileri<\/td>\n<td>Tek oturumluk veri, form verileri, oturum bazl\u0131 kullan\u0131c\u0131 deneyimi<\/td>\n<td>Oturum y\u00f6netimi, kullan\u0131c\u0131 takibi, k\u00fc\u00e7\u00fck \u00e7apl\u0131 ki\u015fiselle\u015ftirme<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Bu tabloya bak\u0131ld\u0131\u011f\u0131nda, <code>localStorage<\/code>&#8216;\u0131n kal\u0131c\u0131l\u0131\u011f\u0131 ve geni\u015f depolama kapasitesiyle \u00f6ne \u00e7\u0131kt\u0131\u011f\u0131 g\u00f6r\u00fcl\u00fcrken, <code>cookies<\/code>&#8216;in ise sunucuya veri g\u00f6nderme yetene\u011fiyle farkl\u0131la\u015ft\u0131\u011f\u0131 anla\u015f\u0131lmaktad\u0131r. <code>sessionStorage<\/code> ise daha \u00e7ok ge\u00e7ici, tek oturumluk veri depolama i\u00e7in idealdir. Her bir arac\u0131n kendi spesifik kullan\u0131m senaryosu oldu\u011funu unutmamak, do\u011fru karar\u0131 vermenin anahtar\u0131d\u0131r.<\/p>\n<h2>localStorage Nas\u0131l Kullan\u0131l\u0131r: Temel Ad\u0131mlar ve Uygulamal\u0131 \u00d6rnekler<\/h2>\n<p><code>localStorage<\/code>&#8216;\u0131n kullan\u0131m\u0131 olduk\u00e7a basittir ve birka\u00e7 temel metot etraf\u0131nda d\u00f6ner. Bu metotlar sayesinde taray\u0131c\u0131da veri depolayabilir, depolanan verilere eri\u015febilir, onlar\u0131 g\u00fcncelleyebilir veya silebilirsiniz. Temel olarak, <code>localStorage<\/code> nesnesi \u00fczerinde i\u015flem yapar\u0131z. JavaScript&#8217;in <code>window<\/code> nesnesinin bir \u00f6zelli\u011fidir, bu nedenle do\u011frudan <code>localStorage.setItem()<\/code> gibi \u00e7a\u011fr\u0131lar yapabiliriz.<\/p>\n<h3>Veri Depolama: setItem() Metodu<\/h3>\n<p>Bir anahtar-de\u011fer \u00e7iftini <code>localStorage<\/code>&#8216;a kaydetmek i\u00e7in <code>setItem()<\/code> metodunu kullan\u0131r\u0131z. Bu metot iki arg\u00fcman al\u0131r: bir anahtar (key) ve bir de\u011fer (value). Her ikisi de string format\u0131nda olmal\u0131d\u0131r.<\/p>\n<pre><code>\nlocalStorage.setItem('kullaniciAdi', 'Ahmet Y\u0131lmaz');\nlocalStorage.setItem('tercihEdilenTema', 'dark');\nconsole.log('Veriler localStorage\\'a kaydedildi.');\n<\/pre>\n<p><\/code><\/p>\n<p>Yukar\u0131daki \u00f6rnekte, 'kullaniciAdi' anahtar\u0131na 'Ahmet Y\u0131lmaz' de\u011ferini, 'tercihEdilenTema' anahtar\u0131na ise 'dark' de\u011ferini atad\u0131k. Art\u0131k bu veriler, taray\u0131c\u0131 kapat\u0131lsa bile kal\u0131c\u0131 olarak depolanm\u0131\u015ft\u0131r.<\/p>\n<h3>Veriye Eri\u015fim: getItem() Metodu<\/h3>\n<p>Depolanan bir veriyi geri almak i\u00e7in <code>getItem()<\/code> metodunu kullan\u0131r\u0131z. Bu metot, sadece anahtar arg\u00fcman\u0131n\u0131 al\u0131r ve ilgili anahtara ait string de\u011feri d\u00f6nd\u00fcr\u00fcr. E\u011fer belirtilen anahtar mevcut de\u011filse, <code>null<\/code> d\u00f6nd\u00fcr\u00fcr.<\/p>\n<pre><code>\nlet kullanici = localStorage.getItem('kullaniciAdi');\nlet tema = localStorage.getItem('tercihEdilenTema');\nlet olmayanVeri = localStorage.getItem('yokolanVeri'); \/\/ null d\u00f6necektir\n\nconsole.log('Kullan\u0131c\u0131 Ad\u0131:', kullanici); \/\/ Ahmet Y\u0131lmaz\nconsole.log('Tercih Edilen Tema:', tema);   \/\/ dark\nconsole.log('Olmayan Veri:', olmayanVeri); \/\/ null\n<\/pre>\n<p><\/code><\/p>\n<p><code>getItem()<\/code> metodu ile al\u0131nan veriler her zaman string format\u0131ndad\u0131r. Bu nedenle, say\u0131sal de\u011ferler veya boolean (do\u011fru\/yanl\u0131\u015f) de\u011ferler depolad\u0131\u011f\u0131n\u0131zda, onlar\u0131 gerekti\u011finde uygun veri tipine d\u00f6n\u00fc\u015ft\u00fcrmeniz gerekebilir.<\/p>\n<h3>Veri Silme: removeItem() Metodu<\/h3>\n<p>Belirli bir anahtara ait veriyi <code>localStorage<\/code>'dan silmek i\u00e7in <code>removeItem()<\/code> metodunu kullan\u0131r\u0131z. Bu metot sadece silinecek verinin anahtar\u0131n\u0131 arg\u00fcman olarak al\u0131r.<\/p>\n<pre><code>\nlocalStorage.removeItem('tercihEdilenTema');\nconsole.log('Tercih edilen tema bilgisi silindi.');\n\nlet temaSilindiMi = localStorage.getItem('tercihEdilenTema');\nconsole.log('Tema bilgisi (silindikten sonra):', temaSilindiMi); \/\/ null\n<\/pre>\n<p><\/code><\/p>\n<h3>T\u00fcm Verileri Temizleme: clear() Metodu<\/h3>\n<p><code>localStorage<\/code>'daki t\u00fcm anahtar-de\u011fer \u00e7iftlerini silmek isterseniz, <code>clear()<\/code> metodunu kullanabilirsiniz. Bu, ilgili alan ad\u0131n\u0131n (domain) t\u00fcm <code>localStorage<\/code> verisini temizleyecektir. Dikkatli kullan\u0131lmas\u0131 gereken bir metottur, \u00e7\u00fcnk\u00fc geri al\u0131namaz bir i\u015flemdir.<\/p>\n<pre><code>\nlocalStorage.clear();\nconsole.log('T\u00fcm localStorage verileri temizlendi.');\n\nlet kullaniciSonKontrol = localStorage.getItem('kullaniciAdi');\nconsole.log('Kullan\u0131c\u0131 ad\u0131 (t\u00fcm veriler temizlendikten sonra):', kullaniciSonKontrol); \/\/ null\n<\/pre>\n<p><\/code><\/p>\n<h3>Anahtarlar\u0131 Listeleme: key() ve length \u00d6zelli\u011fi<\/h3>\n<p><code>localStorage<\/code>'da ka\u00e7 tane \u00f6\u011fe oldu\u011funu <code>length<\/code> \u00f6zelli\u011fi ile \u00f6\u011frenebilir, belirli bir indeksteki anahtar\u0131 ise <code>key()<\/code> metodu ile alabilirsiniz. Bu, depolanan t\u00fcm \u00f6\u011feler aras\u0131nda d\u00f6ng\u00fc yapmak i\u00e7in kullan\u0131\u015fl\u0131d\u0131r.<\/p>\n<pre><code>\n\/\/ \u00d6rnek veriler ekleyelim\nlocalStorage.setItem('\u00fcr\u00fcn1', 'Laptop');\nlocalStorage.setItem('\u00fcr\u00fcn2', 'Mouse');\n\nconsole.log('Depolanan \u00f6\u011fe say\u0131s\u0131:', localStorage.length); \/\/ 2\n\nfor (let i = 0; i < localStorage.length; i++) {\n  let anahtar = localStorage.key(i);\n  let deger = localStorage.getItem(anahtar);\n  console.log(<code>Anahtar: ${anahtar}, De\u011fer: ${deger}<\/code>);\n}\n\/\/ \u00c7\u0131kt\u0131:\n\/\/ Anahtar: \u00fcr\u00fcn1, De\u011fer: Laptop\n\/\/ Anahtar: \u00fcr\u00fcn2, De\u011fer: Mouse\n<\/pre>\n<p><\/code><\/p>\n<h3>Karma\u015f\u0131k Objeleri Depolama: JSON.stringify() ve JSON.parse()<\/h3>\n<p>Daha \u00f6nce de belirtti\u011fimiz gibi, <code>localStorage<\/code> yaln\u0131zca string verileri depolayabilir. Ancak modern web uygulamalar\u0131nda genellikle say\u0131sal de\u011ferler, boolean'lar, diziler veya objeler gibi karma\u015f\u0131k veri yap\u0131lar\u0131n\u0131 depolamam\u0131z gerekir. Bu durumda, JavaScript'in yerle\u015fik <code>JSON<\/code> objesini kullan\u0131r\u0131z. Objeleri depolamadan \u00f6nce <code>JSON.stringify()<\/code> ile string'e d\u00f6n\u00fc\u015ft\u00fcr\u00fcr, al\u0131rken ise <code>JSON.parse()<\/code> ile tekrar objeye \u00e7eviririz.<\/p>\n<pre><code>\nlet kullaniciAyarlari = {\n  theme: 'dark',\n  fontSize: 16,\n  notifications: true,\n  lastLogin: new Date()\n};\n\n\/\/ Objeyi string'e d\u00f6n\u00fc\u015ft\u00fcrerek kaydet\nlocalStorage.setItem('ayarlar', JSON.stringify(kullaniciAyarlari));\nconsole.log('Kullan\u0131c\u0131 ayarlar\u0131 string olarak kaydedildi.');\n\n\/\/ String'i tekrar objeye d\u00f6n\u00fc\u015ft\u00fcrerek geri al\nlet kaydedilenAyarlar = JSON.getItem('ayarlar');\nlet ayarlariObje = JSON.parse(kaydedilenAyarlar);\n\nconsole.log('Kaydedilen Ayarlar Objesi:', ayarlariObje);\nconsole.log('Tema:', ayarlariObje.theme);\nconsole.log('Bildirimler:', ayarlariObje.notifications);\n<\/pre>\n<p><\/code><\/p>\n<p>Bu teknik, <code>localStorage<\/code>'\u0131n string k\u0131s\u0131tlamas\u0131n\u0131 a\u015farak, hemen hemen her t\u00fcrden JavaScript verisini depolaman\u0131za olanak tan\u0131r. Ancak, <code>JSON.parse()<\/code> i\u015fleminin hata d\u00f6nd\u00fcrebilece\u011fini unutmay\u0131n; bu nedenle, g\u00fcvenilmeyen kaynaklardan al\u0131nan verileri d\u00f6n\u00fc\u015ft\u00fcr\u00fcrken hata yakalama mekanizmalar\u0131 (<code>try...catch<\/code> bloklar\u0131) kullanmak iyi bir uygulamad\u0131r.<\/p>\n<h2>Ger\u00e7ek D\u00fcnya Senaryolar\u0131nda localStorage: Vaka Analizleri ve Pratik Uygulamalar<\/h2>\n<p><code>localStorage<\/code>'\u0131n teorik bilgilerini \u00f6\u011frendik. \u015eimdi s\u0131ra geldi bu bilgileri ger\u00e7ek d\u00fcnya senaryolar\u0131nda nas\u0131l kullanabilece\u011fimize, uygulamal\u0131 vaka analizleriyle bu konuyu peki\u015ftirmeye. <code>localStorage<\/code>, g\u00fcnl\u00fck web geli\u015ftirme g\u00f6revlerinde say\u0131s\u0131z f\u0131rsat sunar ve kullan\u0131c\u0131 deneyimini \u00f6nemli \u00f6l\u00e7\u00fcde geli\u015ftirebilir.<\/p>\n<h3>Vaka Analizi 1: E-ticaret Sitesinde Sepet Bilgilerini Kal\u0131c\u0131 Hale Getirme<\/h3>\n<p>Bir e-ticaret sitesinde, kullan\u0131c\u0131n\u0131n sepete ekledi\u011fi \u00fcr\u00fcnlerin sayfa yenilense bile hatta taray\u0131c\u0131 kapat\u0131l\u0131p tekrar a\u00e7\u0131lsa bile korunmas\u0131 temel bir beklentidir. \u0130\u015fte <code>localStorage<\/code> burada kritik bir rol oynar. Kullan\u0131c\u0131 sepete bir \u00fcr\u00fcn ekledi\u011finde, sepetin o anki durumunu (\u00fcr\u00fcnler, miktarlar, toplam fiyat vb.) <code>localStorage<\/code>'a kaydedebiliriz. Sayfa y\u00fcklendi\u011finde ise, <code>localStorage<\/code>'dan bu veriyi \u00e7ekerek sepeti eski haline getirebiliriz.<\/p>\n<pre><code>\n\/\/ Sepet objesi\nlet sepet = [];\n\n\/\/ Sepete \u00fcr\u00fcn ekleme fonksiyonu\nfunction urunEkle(urunId, urunAdi, fiyat, adet) {\n  sepet.push({ id: urunId, ad: urunAdi, fiyat: fiyat, adet: adet });\n  localStorage.setItem('alisverisSepeti', JSON.stringify(sepet)); \/\/ Sepeti localStorage'a kaydet\n  console.log(<code>${urunAdi} sepete eklendi.<\/code>);\n}\n\n\/\/ Sepeti localStorage'dan y\u00fckleme fonksiyonu\nfunction sepetiYukle() {\n  const kaydedilenSepet = localStorage.getItem('alisverisSepeti');\n  if (kaydedilenSepet) {\n    sepet = JSON.parse(kaydedilenSepet);\n    console.log('Sepetiniz y\u00fcklendi:', sepet);\n  } else {\n    console.log('Sepetiniz bo\u015f.');\n  }\n}\n\n\/\/ Sayfa y\u00fcklendi\u011finde sepeti y\u00fckle\nwindow.onload = sepetiYukle;\n\n\/\/ \u00d6rnek kullan\u0131m:\nurunEkle(1, 'Laptop', 12000, 1);\nurunEkle(2, 'Kablosuz Mouse', 250, 2);\n<\/pre>\n<p><\/code><\/p>\n<p>Bu senaryo, kullan\u0131c\u0131 dostu bir al\u0131\u015fveri\u015f deneyimi sunarken, sunucuya her mikro etkile\u015fimde (\u00fcr\u00fcn ekleme\/\u00e7\u0131karma) istek g\u00f6nderme y\u00fck\u00fcn\u00fc de azalt\u0131r. Ancak, \u00f6deme a\u015famas\u0131na ge\u00e7ildi\u011finde veya sipari\u015f kesinle\u015ftirildi\u011finde, g\u00fcvenlik ve tutarl\u0131l\u0131k a\u00e7\u0131s\u0131ndan sepet bilgilerinin sunucu taraf\u0131nda do\u011frulanmas\u0131 ve i\u015flenmesi gerekti\u011fini unutmamak \u00f6nemlidir.<\/p>\n<h3>Vaka Analizi 2: Kullan\u0131c\u0131 Tercihlerini (Tema, Dil vb.) Kal\u0131c\u0131 Olarak Saklama<\/h3>\n<p>\u00c7o\u011fu web uygulamas\u0131, kullan\u0131c\u0131n\u0131n aray\u00fcz tercihlerini (koyu\/a\u00e7\u0131k tema, dil se\u00e7imi, bildirim ayarlar\u0131) kaydetme \u00f6zelli\u011fi sunar. Bu tercihler, kullan\u0131c\u0131n\u0131n uygulamay\u0131 her ziyaret etti\u011finde ba\u015ftan ayarlamak zorunda kalmamas\u0131 i\u00e7in <code>localStorage<\/code>'da saklanabilir.<\/p>\n<pre><code>\n\/\/ Tema ayar\u0131n\u0131 kaydetme\nfunction temaAyarlariKaydet(tema) {\n  localStorage.setItem('kullaniciTemasi', tema);\n  document.body.className = tema; \/\/ CSS s\u0131n\u0131f\u0131n\u0131 de\u011fi\u015ftirerek temay\u0131 uygula\n  console.log(<code>Tema \"${tema}\" olarak ayarland\u0131 ve kaydedildi.<\/code>);\n}\n\n\/\/ Tema ayar\u0131n\u0131 y\u00fckleme\nfunction temaAyarlariYukle() {\n  const kaydedilenTema = localStorage.getItem('kullaniciTemasi');\n  if (kaydedilenTema) {\n    document.body.className = kaydedilenTema;\n    console.log(<code>Kaydedilen tema \"${kaydedilenTema}\" y\u00fcklendi.<\/code>);\n  } else {\n    \/\/ Varsay\u0131lan tema\n    document.body.className = 'light';\n    console.log('Varsay\u0131lan tema (light) y\u00fcklendi.');\n  }\n}\n\n\/\/ Sayfa y\u00fcklendi\u011finde temay\u0131 y\u00fckle\nwindow.onload = temaAyarlariYukle;\n\n\/\/ Tema de\u011fi\u015ftirme butonuna t\u0131kland\u0131\u011f\u0131nda (\u00f6rnek)\ndocument.getElementById('toggleThemeBtn').addEventListener('click', function() {\n  const currentTheme = localStorage.getItem('kullaniciTemasi') || 'light';\n  const newTheme = currentTheme === 'light' ? 'dark' : 'light';\n  temaAyarlariKaydet(newTheme);\n});\n<\/pre>\n<p><\/code><\/p>\n<p>Bu yakla\u015f\u0131m, ki\u015fiselle\u015ftirilmi\u015f bir deneyim sunarak kullan\u0131c\u0131 memnuniyetini art\u0131r\u0131r. Ayr\u0131ca, sunucudan her seferinde kullan\u0131c\u0131 tercihlerini \u00e7ekmek yerine, do\u011frudan taray\u0131c\u0131dan h\u0131zl\u0131ca y\u00fcklenmesini sa\u011flayarak performans\u0131 da iyile\u015ftirir.<\/p>\n<h3>Vaka Analizi 3: \u00c7evrimd\u0131\u015f\u0131 \u00c7al\u0131\u015fma Kabiliyeti \u0130\u00e7in Basit Veri \u00d6nbellekleme<\/h3>\n<p>Tek sayfal\u0131k uygulamalar (SPA) veya hafif i\u00e7erikli siteler i\u00e7in, <code>localStorage<\/code>, temel verileri \u00e7evrimd\u0131\u015f\u0131 eri\u015fim i\u00e7in \u00f6nbelle\u011fe almakta kullan\u0131labilir. \u00d6rne\u011fin, bir blog sitesi, en son okunan makalelerin ba\u015fl\u0131klar\u0131n\u0131 veya k\u0131sa \u00f6zetlerini <code>localStorage<\/code>'da saklayarak kullan\u0131c\u0131 internet ba\u011flant\u0131s\u0131 olmasa bile bu i\u00e7eri\u011fe eri\u015fmesine olanak tan\u0131yabilir.<\/p>\n<pre><code>\nasync function makaleleriGetirVeCachele() {\n  try {\n    const response = await fetch('https:\/\/api.example.com\/makaleler');\n    const data = await response.json();\n    localStorage.setItem('sonMakaleler', JSON.stringify(data));\n    console.log('Makaleler API\\'den al\u0131nd\u0131 ve \u00f6nbelle\u011fe kaydedildi.');\n    return data;\n  } catch (error) {\n    console.error('API\\'den makaleler al\u0131namad\u0131, \u00f6nbelle\u011fe bak\u0131l\u0131yor:', error);\n    const cachedData = localStorage.getItem('sonMakaleler');\n    if (cachedData) {\n      console.log('Makaleler \u00f6nbellekten y\u00fcklendi.');\n      return JSON.parse(cachedData);\n    }\n    return []; \/\/ Hi\u00e7bir veri yoksa bo\u015f dizi d\u00f6nd\u00fcr\n  }\n}\n\n\/\/ Uygulama ba\u015flang\u0131c\u0131nda makaleleri y\u00fckle\nmakaleleriGetirVeCachele().then(makaleler => {\n  console.log('G\u00f6sterilecek makaleler:', makaleler);\n  \/\/ Makaleleri kullan\u0131c\u0131 aray\u00fcz\u00fcnde g\u00f6ster...\n});\n<\/pre>\n<p><\/code><\/p>\n<p>Bu y\u00f6ntem, kullan\u0131c\u0131lar\u0131n internet ba\u011flant\u0131s\u0131 kesildi\u011finde bile temel i\u00e7eri\u011fe eri\u015fmeye devam etmelerini sa\u011flayarak uygulama dayan\u0131kl\u0131l\u0131\u011f\u0131n\u0131 art\u0131r\u0131r. Ancak, b\u00fcy\u00fck ve s\u0131k g\u00fcncellenen veri setleri i\u00e7in <code>IndexedDB<\/code> gibi daha geli\u015fmi\u015f \u00e7\u00f6z\u00fcmlerin d\u00fc\u015f\u00fcn\u00fclmesi gerekebilir, \u00e7\u00fcnk\u00fc <code>localStorage<\/code>'\u0131n kapasite ve senkron \u00e7al\u0131\u015fma k\u0131s\u0131tlamalar\u0131 vard\u0131r.<\/p>\n<div class=\"uzman-ipucu\">\n  Uzman \u0130pucu: Hassas kullan\u0131c\u0131 kimlik bilgilerini (tokenlar, API anahtarlar\u0131) <code>localStorage<\/code>'da saklamaktan ka\u00e7\u0131n\u0131n. XSS sald\u0131r\u0131lar\u0131yla kolayca \u00e7al\u0131nabilirler. Bunun yerine, <code>HTTPOnly<\/code> ve <code>Secure<\/code> bayraklar\u0131yla ayarlanm\u0131\u015f <code>cookies<\/code> veya daha g\u00fcvenli kimlik do\u011frulama ak\u0131\u015flar\u0131 tercih edilmelidir.\n<\/div>\n<h2>localStorage Kullan\u0131rken Dikkat Edilmesi Gerekenler: Performans ve G\u00fcvenlik \u0130pu\u00e7lar\u0131<\/h2>\n<p><code>localStorage<\/code>, kolayl\u0131\u011f\u0131 ve g\u00fcc\u00fc sayesinde bir\u00e7ok senaryoda ideal bir \u00e7\u00f6z\u00fcm olsa da, do\u011fru kullan\u0131lmad\u0131\u011f\u0131nda potansiyel performans sorunlar\u0131na ve g\u00fcvenlik risklerine yol a\u00e7abilir. Bu nedenle, onu uygulamalar\u0131n\u0131za entegre ederken baz\u0131 \u00f6nemli noktalara dikkat etmek kritik \u00f6neme sahiptir.<\/p>\n<h3>G\u00fcvenlik Riskleri ve Hassas Veri Depolama<\/h3>\n<p><code>localStorage<\/code>'\u0131n en b\u00fcy\u00fck g\u00fcvenlik dezavantaj\u0131, JavaScript ile kolayca eri\u015filebilir olmas\u0131d\u0131r. Bu durum, bir XSS (Cross-Site Scripting) sald\u0131r\u0131s\u0131na maruz kal\u0131nd\u0131\u011f\u0131nda, sald\u0131rgan\u0131n kullan\u0131c\u0131n\u0131n <code>localStorage<\/code>'\u0131ndaki t\u00fcm verilere eri\u015febilece\u011fi anlam\u0131na gelir. Bu nedenle:<\/p>\n<ul>\n<li><strong>Hassas Bilgilerden Ka\u00e7\u0131n\u0131n:<\/strong> Kullan\u0131c\u0131 \u015fifreleri, kimlik do\u011frulama tokenlar\u0131 (\u00f6zellikle kal\u0131c\u0131 olanlar), ki\u015fisel tan\u0131mlay\u0131c\u0131 bilgiler (PII) veya banka bilgileri gibi hassas verileri <code>localStorage<\/code>'da asla saklamay\u0131n. Bu t\u00fcr veriler i\u00e7in sunucu taraf\u0131nda g\u00fcvenli oturum y\u00f6netimi, <code>HTTPOnly<\/code> ve <code>Secure<\/code> bayraklar\u0131yla ayarlanm\u0131\u015f \u00e7erezler veya modern kimlik do\u011frulama protokolleri (OAuth, OpenID Connect) tercih edilmelidir.<\/li>\n<li><strong>Veri Do\u011frulama:<\/strong> <code>localStorage<\/code>'dan okudu\u011funuz verileri her zaman do\u011frulay\u0131n ve temizleyin. Bir sald\u0131rgan, <code>localStorage<\/code>'a k\u00f6t\u00fc niyetli script'ler enjekte etmeye \u00e7al\u0131\u015fabilir.<\/li>\n<li><strong>A\u015f\u0131r\u0131 Yetkilendirmeden Ka\u00e7\u0131n\u0131n:<\/strong> Uygulaman\u0131z\u0131n sadece ger\u00e7ekten ihtiyac\u0131 olan verileri <code>localStorage<\/code>'da saklay\u0131n. \"Her \u015feyi kaydet\" yakla\u015f\u0131m\u0131ndan uzak durun.<\/li>\n<\/ul>\n<h3>Performans Etkileri ve Senkron \u00c7al\u0131\u015fma<\/h3>\n<p><code>localStorage<\/code> i\u015flemleri senkrondur, yani ana JavaScript i\u015f par\u00e7ac\u0131\u011f\u0131n\u0131 bloke ederler. Bu, \u00f6zellikle b\u00fcy\u00fck veri setleriyle u\u011fra\u015f\u0131rken veya \u00e7ok s\u0131k okuma\/yazma i\u015flemleri yap\u0131ld\u0131\u011f\u0131nda uygulaman\u0131z\u0131n kullan\u0131c\u0131 aray\u00fcz\u00fcnde tak\u0131lmalara (jank) neden olabilir.<\/p>\n<ul>\n<li><strong>B\u00fcy\u00fck Veri Setlerinden Ka\u00e7\u0131n\u0131n:<\/strong> Her ne kadar 5-10 MB depolama kapasitesi olsa da, bu alan\u0131 doldurmaktan ka\u00e7\u0131n\u0131n. Her <code>setItem<\/code> veya <code>getItem<\/code> \u00e7a\u011fr\u0131s\u0131, I\/O (giri\u015f\/\u00e7\u0131k\u0131\u015f) i\u015flemi demektir ve ana i\u015f par\u00e7ac\u0131\u011f\u0131n\u0131 bekletebilir.<\/li>\n<li><strong>Toplu \u0130\u015flemler Yap\u0131n:<\/strong> M\u00fcmk\u00fcn oldu\u011funca, birden fazla k\u00fc\u00e7\u00fck \u00f6\u011feyi ayr\u0131 ayr\u0131 kaydetmek yerine, bunlar\u0131 tek bir JSON objesi i\u00e7inde toplay\u0131p tek seferde kaydedin. Bu, i\u015flem say\u0131s\u0131n\u0131 azalt\u0131r.<\/li>\n<li><strong>Bellek Kullan\u0131m\u0131:<\/strong> <code>localStorage<\/code> verileri, taray\u0131c\u0131 taraf\u0131ndan bellekte tutulur. \u00c7ok fazla veri depolamak, taray\u0131c\u0131n\u0131n bellek kullan\u0131m\u0131n\u0131 art\u0131rabilir ve bu da genel sistem performans\u0131n\u0131 etkileyebilir.<\/li>\n<li><strong>Gereksiz Okuma\/Yazma \u0130\u015flemlerinden Ka\u00e7\u0131n\u0131n:<\/strong> Yaln\u0131zca de\u011fi\u015fti\u011finde veya ihtiya\u00e7 duyuldu\u011funda <code>localStorage<\/code>'a yaz\u0131n veya oradan okuyun. \u00d6rne\u011fin, her saniye bir saya\u00e7 de\u011ferini g\u00fcncellemek yerine, sayfa kapat\u0131l\u0131rken son de\u011feri kaydetmeyi d\u00fc\u015f\u00fcnebilirsiniz.<\/li>\n<\/ul>\n<h3>Depolama Limitleri ve Hata Y\u00f6netimi<\/h3>\n<p>Taray\u0131c\u0131lar, <code>localStorage<\/code> i\u00e7in belirli depolama limitleri uygular (genellikle 5-10 MB). Bu limit a\u015f\u0131ld\u0131\u011f\u0131nda bir hata (<code>QuotaExceededError<\/code>) olu\u015fur.<\/p>\n<pre><code>\ntry {\n  localStorage.setItem('cokBuyukVeri', 'a'.repeat(10 * 1024 * 1024)); \/\/ 10MB'dan b\u00fcy\u00fck veri\n} catch (e) {\n  if (e.name === 'QuotaExceededError') {\n    console.error('Depolama limiti a\u015f\u0131ld\u0131! Baz\u0131 verileri temizlemeyi d\u00fc\u015f\u00fcn\u00fcn.');\n    \/\/ Kullan\u0131c\u0131ya bilgi ver veya eski verileri sil\n  } else {\n    console.error('Bir hata olu\u015ftu:', e);\n  }\n}\n<\/pre>\n<p><\/code><\/p>\n<p>Bu durumu y\u00f6netmek i\u00e7in her zaman <code>try...catch<\/code> bloklar\u0131 kullanmak \u00f6nemlidir. Kullan\u0131c\u0131ya bir hata mesaj\u0131 g\u00f6sterebilir veya uygulaman\u0131z\u0131n daha eski verileri otomatik olarak temizlemesini sa\u011flayabilirsiniz.<\/p>\n<h3>'storage' Olay\u0131n\u0131 Kullanma<\/h3>\n<p>Ayn\u0131 alan ad\u0131ndan (domain) farkl\u0131 taray\u0131c\u0131 sekmeleri veya pencereleri aras\u0131nda <code>localStorage<\/code>'daki de\u011fi\u015fiklikleri dinlemek i\u00e7in <code>window.onstorage<\/code> olay\u0131n\u0131 kullanabilirsiniz. Bu olay, bir sekmedeki <code>localStorage<\/code>'da yap\u0131lan bir de\u011fi\u015fikli\u011fin di\u011fer sekmelere bildirilmesini sa\u011flar.<\/p>\n<pre><code>\nwindow.addEventListener('storage', (event) => {\n  if (event.key === 'kullaniciTemasi') {\n    console.log(<code>Ba\u015fka bir sekmede tema de\u011fi\u015fti: ${event.newValue}<\/code>);\n    document.body.className = event.newValue; \/\/ Temay\u0131 g\u00fcncelle\n  }\n  if (event.key === 'alisverisSepeti') {\n    console.log('Al\u0131\u015fveri\u015f sepeti g\u00fcncellendi, sepeti yeniden y\u00fckle.');\n    \/\/ Sepeti yeniden y\u00fckleme fonksiyonunu \u00e7a\u011f\u0131r\n  }\n  \/\/ event.key: De\u011fi\u015fen anahtar\n  \/\/ event.oldValue: De\u011fi\u015fmeden \u00f6nceki de\u011fer\n  \/\/ event.newValue: De\u011fi\u015ftikten sonraki de\u011fer\n  \/\/ event.url: De\u011fi\u015fikli\u011fin yap\u0131ld\u0131\u011f\u0131 sayfan\u0131n URL'si\n});\n<\/pre>\n<p><\/code><\/p>\n<p>Bu \u00f6zellik, ger\u00e7ek zamanl\u0131 kullan\u0131c\u0131 deneyimleri sunmak ve farkl\u0131 sekmelerdeki uygulaman\u0131n durumunu senkronize etmek i\u00e7in \u00e7ok g\u00fc\u00e7l\u00fc bir ara\u00e7t\u0131r. \u00d6rne\u011fin, kullan\u0131c\u0131 bir sekmede oturum a\u00e7t\u0131\u011f\u0131nda, di\u011fer t\u00fcm a\u00e7\u0131k sekmelerde de otomatik olarak oturum a\u00e7m\u0131\u015f gibi g\u00f6r\u00fcnmesini sa\u011flayabilirsiniz.<\/p>\n<h2>\u0130leri D\u00fczey localStorage Teknikleri ve Alternatifleri Nelerdir?<\/h2>\n<p><code>localStorage<\/code>'\u0131n temellerini ve kullan\u0131m senaryolar\u0131n\u0131 anlad\u0131k. Ancak baz\u0131 durumlarda, <code>localStorage<\/code>'\u0131n basit yap\u0131s\u0131 yetersiz kalabilir veya farkl\u0131 ihtiya\u00e7lar ortaya \u00e7\u0131kabilir. Bu b\u00f6l\u00fcmde, <code>localStorage<\/code> kullan\u0131m\u0131n\u0131 daha verimli hale getirecek ileri d\u00fczey teknikleri ve ne zaman alternatif \u00e7\u00f6z\u00fcmlere y\u00f6nelmemiz gerekti\u011fini inceleyece\u011fiz.<\/p>\n<h3>localStorage \u0130\u00e7in Kapsay\u0131c\u0131 (Wrapper) Olu\u015fturma<\/h3>\n<p>Uygulaman\u0131z b\u00fcy\u00fcd\u00fck\u00e7e, <code>localStorage.setItem()<\/code> ve <code>localStorage.getItem()<\/code> \u00e7a\u011fr\u0131lar\u0131n\u0131 do\u011frudan kullanmak kod tekrar\u0131na yol a\u00e7abilir ve hata y\u00f6netimi zorla\u015fabilir. Bu durumlarda, <code>localStorage<\/code> i\u015flemleri i\u00e7in kendi \u00f6zel kapsay\u0131c\u0131n\u0131z\u0131 (wrapper) olu\u015fturmak, kodunuzu daha temiz ve y\u00f6netilebilir hale getirir.<\/p>\n<pre><code>\nconst storageUtil = {\n  setItem: (key, value) => {\n    try {\n      localStorage.setItem(key, JSON.stringify(value));\n      return true;\n    } catch (e) {\n      console.error(<code>localStorage&#039;a yazarken hata olu\u015ftu (${key}):<\/code>, e);\n      return false;\n    }\n  },\n  getItem: (key) => {\n    try {\n      const value = localStorage.getItem(key);\n      return value ? JSON.parse(value) : null;\n    } catch (e) {\n      console.error(<code>localStorage&#039;dan okurken hata olu\u015ftu (${key}):<\/code>, e);\n      return null;\n    }\n  },\n  removeItem: (key) => {\n    try {\n      localStorage.removeItem(key);\n      return true;\n    } catch (e) {\n      console.error(<code>localStorage&#039;dan silerken hata olu\u015ftu (${key}):<\/code>, e);\n      return false;\n    }\n  },\n  clear: () => {\n    try {\n      localStorage.clear();\n      return true;\n    } catch (e) {\n      console.error('localStorage temizlenirken hata olu\u015ftu:', e);\n      return false;\n    }\n  }\n};\n\n\/\/ Kullan\u0131m \u00f6rne\u011fi\nstorageUtil.setItem('kullaniciProfili', { id: 101, ad: 'Ay\u015fe' });\nconst profil = storageUtil.getItem('kullaniciProfili');\nconsole.log(profil); \/\/ { id: 101, ad: 'Ay\u015fe' }\n<\/pre>\n<p><\/code><\/p>\n<p>Bu kapsay\u0131c\u0131, hata y\u00f6netimini merkezile\u015ftirir, JSON d\u00f6n\u00fc\u015ft\u00fcrme i\u015flemlerini otomatikle\u015ftirir ve gelecekte depolama mekanizmas\u0131n\u0131 de\u011fi\u015ftirmek isterseniz (\u00f6rne\u011fin <code>IndexedDB<\/code>'ye ge\u00e7i\u015f) daha esnek bir yap\u0131 sunar.<\/p>\n<h3>sessionStorage Kullan\u0131m Senaryolar\u0131<\/h3>\n<p><code>sessionStorage<\/code>, <code>localStorage<\/code> ile ayn\u0131 API'ye sahiptir ancak depolad\u0131\u011f\u0131 veriler sadece mevcut oturum s\u00fcresince kal\u0131c\u0131d\u0131r. Taray\u0131c\u0131 sekmesi veya penceresi kapat\u0131ld\u0131\u011f\u0131nda t\u00fcm veriler silinir. Bu \u00f6zellik, \u00f6zellikle \u015funlar i\u00e7in kullan\u0131\u015fl\u0131d\u0131r:<\/p>\n<ul>\n<li><strong>Tek Oturumluk Form Verileri:<\/strong> Kullan\u0131c\u0131n\u0131n \u00e7ok ad\u0131ml\u0131 bir form doldururken, sayfa yenilense bile \u00f6nceki ad\u0131mlardaki verilerin korunmas\u0131 gerekebilir. <code>sessionStorage<\/code>, bu ge\u00e7ici verileri kaybetmeden saklamak i\u00e7in idealdir.<\/li>\n<li><strong>Ge\u00e7ici Aray\u00fcz Durumlar\u0131:<\/strong> Bir modal pencerenin a\u00e7\u0131k olup olmad\u0131\u011f\u0131, belirli bir filtrenin durumu gibi, kullan\u0131c\u0131n\u0131n o anki oturumuyla s\u0131n\u0131rl\u0131 aray\u00fcz durumlar\u0131n\u0131 depolamak i\u00e7in kullan\u0131labilir.<\/li>\n<li><strong>Hassas Olmayan Oturum Verileri:<\/strong> K\u0131sa \u00f6m\u00fcrl\u00fc ve hassas olmayan oturum bilgileri i\u00e7in, <code>sessionStorage<\/code>, <code>localStorage<\/code>'a k\u0131yasla daha g\u00fcvenli olabilir \u00e7\u00fcnk\u00fc oturum sonunda otomatik olarak temizlenir.<\/li>\n<\/ul>\n<h3>localStorage Ne Zaman Yeterli De\u011fil: Alternatif Depolama \u00c7\u00f6z\u00fcmleri<\/h3>\n<p><code>localStorage<\/code> bir\u00e7ok senaryo i\u00e7in harika olsa da, baz\u0131 durumlar onun limitlerini a\u015far ve daha g\u00fc\u00e7l\u00fc alternatiflere ihtiya\u00e7 duyulur:<\/p>\n<ul>\n<li><strong>B\u00fcy\u00fck Veri Setleri:<\/strong> E\u011fer megabaytlarca veri depolaman\u0131z gerekiyorsa veya karma\u015f\u0131k sorgular yapman\u0131z gerekiyorsa, <code>localStorage<\/code>'\u0131n 5-10 MB s\u0131n\u0131r\u0131 ve senkron yap\u0131s\u0131 yetersiz kalacakt\u0131r.<\/li>\n<li><strong>Yap\u0131sal Veri Depolama ve Sorgulama:<\/strong> <code>localStorage<\/code> sadece anahtar-de\u011fer \u00e7iftleri depolar. \u0130li\u015fkisel veri, indeksleme veya karma\u015f\u0131k sorgulama yeteneklerine ihtiyac\u0131n\u0131z varsa, <code>IndexedDB<\/code> gibi bir \u00e7\u00f6z\u00fcme y\u00f6nelmelisiniz.<\/li>\n<li><strong>Asenkron \u0130\u015flemler:<\/strong> Kullan\u0131c\u0131 aray\u00fcz\u00fcn\u00fc bloke etmeden, arka planda veri okuma\/yazma i\u015flemleri yapmak istiyorsan\u0131z, <code>IndexedDB<\/code> gibi asenkron API'ler \u00e7ok daha uygundur.<\/li>\n<li><strong>\u0130stemci Taraf\u0131nda Veritaban\u0131 Benzeri \u0130\u015flevsellik:<\/strong> Taray\u0131c\u0131da tam te\u015fekk\u00fcll\u00fc bir veritaban\u0131 deneyimi ar\u0131yorsan\u0131z, <code>IndexedDB<\/code> veya \u00fczerine in\u015fa edilmi\u015f k\u00fct\u00fcphaneler (\u00f6rne\u011fin <a href=\"https:\/\/dexie.org\/\" target=\"_blank\" rel=\"noopener\">Dexie.js<\/a>) en iyi se\u00e7enektir.<\/li>\n<\/ul>\n<p><code>IndexedDB<\/code>, taray\u0131c\u0131da NoSQL bir veritaban\u0131 gibi \u00e7al\u0131\u015fan, b\u00fcy\u00fck miktarda yap\u0131sal veriyi depolamak i\u00e7in tasarlanm\u0131\u015f g\u00fc\u00e7l\u00fc bir API'dir. Asenkron olmas\u0131, ana i\u015f par\u00e7ac\u0131\u011f\u0131n\u0131 bloke etmemesi ve geli\u015fmi\u015f sorgulama yetenekleri sunmas\u0131yla <code>localStorage<\/code>'\u0131n zay\u0131f kald\u0131\u011f\u0131 noktalarda parlar. Ancak, kullan\u0131m\u0131n\u0131n <code>localStorage<\/code>'a g\u00f6re daha karma\u015f\u0131k oldu\u011funu belirtmek gerekir.<\/p>\n<h2>Mobil Uyumlu localStorage Kullan\u0131m\u0131: Responsive Tasar\u0131mlarda Depolama<\/h2>\n<p><code>localStorage<\/code>'\u0131n kendisi asl\u0131nda \"mobil uyumlu\" veya \"responsive\" de\u011fildir; \u00e7\u00fcnk\u00fc bu bir depolama mekanizmas\u0131d\u0131r, aray\u00fcz veya tasar\u0131m unsuru de\u011fildir. Ancak, responsive web tasar\u0131mlar\u0131yla birlikte \u00e7al\u0131\u015farak, farkl\u0131 ekran boyutlar\u0131na ve cihazlara \u00f6zel kullan\u0131c\u0131 deneyimleri sunma konusunda dolayl\u0131 yoldan rol oynayabilir. Geli\u015ftiriciler, medya sorgular\u0131yla belirledikleri farkl\u0131 aray\u00fcz davran\u0131\u015flar\u0131n\u0131 <code>localStorage<\/code>'da depolayabilir ve b\u00f6ylece kullan\u0131c\u0131n\u0131n cihaz\u0131na \u00f6zel tercihleri koruyabilirler.<\/p>\n<h3>Responsive Tasar\u0131mlarda localStorage'\u0131n Dolayl\u0131 Rol\u00fc<\/h3>\n<p>Bir web uygulamas\u0131, farkl\u0131 ekran boyutlar\u0131 i\u00e7in farkl\u0131 d\u00fczenler veya \u00f6zellikler sunabilir. \u00d6rne\u011fin, bir mobil cihazda men\u00fc varsay\u0131lan olarak kapal\u0131yken, masa\u00fcst\u00fc bir cihazda a\u00e7\u0131k olabilir. Kullan\u0131c\u0131n\u0131n bu tercihini kal\u0131c\u0131 hale getirmek i\u00e7in <code>localStorage<\/code> kullan\u0131labilir:<\/p>\n<pre><code>\nfunction getPreferredLayout() {\n  \/\/ \u00d6nce localStorage'dan kayd\u0131 kontrol et\n  const savedLayout = localStorage.getItem('userPreferredLayout');\n  if (savedLayout) {\n    return savedLayout;\n  }\n\n  \/\/ E\u011fer kaydedilmemi\u015fse, mevcut ekran boyutuna g\u00f6re varsay\u0131lan\u0131 belirle\n  if (window.matchMedia(\"(max-width: 768px)\").matches) {\n    return \"mobile-default\"; \/\/ Mobil varsay\u0131lan\u0131\n  } else {\n    return \"desktop-default\"; \/\/ Masa\u00fcst\u00fc varsay\u0131lan\u0131\n  }\n}\n\n\/\/ Tercih edilen d\u00fczeni localStorage'a kaydetme\nfunction savePreferredLayout(layout) {\n  localStorage.setItem('userPreferredLayout', layout);\n}\n\n\/\/ Uygulamay\u0131 ba\u015flat\u0131rken d\u00fczeni y\u00fckle\nconst currentLayout = getPreferredLayout();\nconsole.log('Mevcut d\u00fczen:', currentLayout);\n\/\/ UI elemanlar\u0131n\u0131 bu d\u00fczene g\u00f6re ayarla\n<\/pre>\n<p><\/code><\/p>\n<p>Bu \u00f6rnekte, bir kullan\u0131c\u0131 mobil cihaz\u0131nda men\u00fcy\u00fc manuel olarak a\u00e7\u0131k konuma getirdiyse, bu bilgi <code>localStorage<\/code>'a kaydedilebilir. Bir sonraki mobil ziyarette, varsay\u0131lan kapal\u0131 men\u00fc yerine kullan\u0131c\u0131n\u0131n tercih etti\u011fi a\u00e7\u0131k men\u00fc g\u00f6sterilebilir. Ayn\u0131 \u015fekilde, masa\u00fcst\u00fcnde kullan\u0131c\u0131n\u0131n panel d\u00fczeni tercihi kaydedilerek farkl\u0131 cihazlarda bile tutarl\u0131 bir deneyim sunulabilir.<\/p>\n<h3>CSS Medya Sorgular\u0131 ile localStorage Entegrasyonu (Kavramsal)<\/h3>\n<p>Do\u011frudan CSS medya sorgular\u0131 <code>localStorage<\/code> ile etkile\u015fime giremez; zira medya sorgular\u0131 tamamen sunum katman\u0131na aittir. Ancak JavaScript, medya sorgular\u0131n\u0131n durumunu alg\u0131layabilir ve bu bilgiyi <code>localStorage<\/code> ile birle\u015ftirerek daha ak\u0131ll\u0131 davran\u0131\u015flar sergileyebilir.<\/p>\n<pre><code class=\"language-css\">\n\/* CSS dosyas\u0131nda \u00f6rnek medya sorgusu *\/\n.menu {\n  display: none; \/* Varsay\u0131lan olarak mobil cihazlarda gizli *\/\n}\n\n@media (min-width: 769px) {\n  .menu {\n    display: block; \/* Masa\u00fcst\u00fcnde g\u00f6r\u00fcn\u00fcr *\/\n  }\n}\n\n\/* JavaScript'te medya sorgusunu dinleme ve localStorage ile birle\u015ftirme *\/\n\/\/ NOT: Bu JavaScript kodu, HTML yap\u0131n\u0131za ve uygulaman\u0131z\u0131n mant\u0131\u011f\u0131na g\u00f6re uyarlanmal\u0131d\u0131r.\ndocument.addEventListener('DOMContentLoaded', () => {\n  const menuElement = document.getElementById('mainMenu'); \/\/ Men\u00fc elementiniz\n\n  function applyMenuVisibility() {\n    const isMobile = window.matchMedia(\"(max-width: 768px)\").matches;\n    let menuState = localStorage.getItem('menuVisibility'); \/\/ Daha \u00f6nce kaydedilmi\u015f durum\n\n    if (isMobile) {\n      \/\/ E\u011fer mobil cihazdaysa, kaydedilmi\u015f durumu veya varsay\u0131lan\u0131 uygula\n      if (menuState === 'open') {\n        menuElement.style.display = 'block';\n      } else if (menuState === 'closed') {\n        menuElement.style.display = 'none';\n      } else {\n        \/\/ \u0130lk kez geliyorsa ve kaydedilmi\u015f durum yoksa, CSS'in varsay\u0131lan\u0131n\u0131 kullan\n        \/\/ Veya belirli bir varsay\u0131lan\u0131 ayarla (\u00f6rne\u011fin: menuElement.style.display = 'none';)\n      }\n    } else {\n      \/\/ Masa\u00fcst\u00fc cihazdaysa, CSS medya sorgusu taraf\u0131ndan y\u00f6netilir\n      \/\/ Veya kaydedilmi\u015f bir masa\u00fcst\u00fc tercihini uygulayabiliriz\n      menuElement.style.display = 'block'; \/\/ CSS'in varsay\u0131lan\u0131\n    }\n  }\n\n  \/\/ \u0130lk y\u00fcklemede ve pencere boyutu de\u011fi\u015fti\u011finde uygula\n  applyMenuVisibility();\n  window.addEventListener('resize', applyMenuVisibility);\n\n  \/\/ Men\u00fc a\u00e7ma\/kapama butonu (\u00f6rnek)\n  document.getElementById('toggleMenuBtn').addEventListener('click', () => {\n    const currentDisplay = menuElement.style.display;\n    if (currentDisplay === 'none') {\n      menuElement.style.display = 'block';\n      localStorage.setItem('menuVisibility', 'open');\n    } else {\n      menuElement.style.display = 'none';\n      localStorage.setItem('menuVisibility', 'closed');\n    }\n  });\n});\n<\/pre>\n<p><\/code><\/p>\n<p>Yukar\u0131daki \u00f6rnekte, men\u00fcn\u00fcn varsay\u0131lan g\u00f6r\u00fcn\u00fcrl\u00fc\u011f\u00fc CSS medya sorgular\u0131 ile belirlenirken, kullan\u0131c\u0131n\u0131n men\u00fcy\u00fc manuel olarak a\u00e7ma veya kapama tercihi <code>localStorage<\/code>'da saklanabilir. JavaScript, ekran boyutu de\u011fi\u015fimlerini dinleyerek (<code>window.addEventListener('resize')<\/code> ve <code>window.matchMedia<\/code> kullanarak), kullan\u0131c\u0131n\u0131n kaydetti\u011fi tercih ile mevcut ekran boyutuna uygun olan\u0131 birle\u015ftirerek en iyi deneyimi sunar. Bu, \u00f6zellikle karma\u015f\u0131k aray\u00fczlere sahip uygulamalarda, kullan\u0131c\u0131n\u0131n farkl\u0131 cihazlarda bile tutarl\u0131 ve ki\u015fiselle\u015ftirilmi\u015f bir deneyim ya\u015famas\u0131n\u0131 sa\u011flar. <code>localStorage<\/code>'\u0131n bu esnekli\u011fi, mobil \u00f6ncelikli geli\u015ftirme yakla\u015f\u0131mlar\u0131n\u0131 tamamlay\u0131c\u0131 bir ara\u00e7 olarak konumlanmas\u0131n\u0131 sa\u011flar.<\/p>\n<h2>Sonu\u00e7: localStorage ile Gelece\u011fin Web Uygulamalar\u0131n\u0131 \u0130n\u015fa Edin<\/h2>\n<p><code>localStorage<\/code>, ilk bak\u0131\u015fta basit bir API gibi g\u00f6r\u00fcnse de, do\u011fru kullan\u0131ld\u0131\u011f\u0131nda web uygulamalar\u0131n\u0131z\u0131n kullan\u0131c\u0131 deneyimini, performans\u0131n\u0131 ve esnekli\u011fini \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131ran g\u00fc\u00e7l\u00fc bir ara\u00e7t\u0131r. Kullan\u0131c\u0131 tercihlerini hat\u0131rlamaktan, sepet bilgilerini kal\u0131c\u0131 hale getirmeye, hatta basit \u00e7evrimd\u0131\u015f\u0131 \u00f6nbellekleme yetenekleri sunmaya kadar geni\u015f bir yelpazede kullan\u0131labilir. Senkron yap\u0131s\u0131 ve string depolama k\u0131s\u0131tlamalar\u0131 gibi baz\u0131 limitleri olsa da, JSON objeleriyle bu k\u0131s\u0131tlamalar\u0131 a\u015fmak ve k\u00fc\u00e7\u00fck ila orta \u00f6l\u00e7ekli veri depolama ihtiya\u00e7lar\u0131 i\u00e7in ideal bir \u00e7\u00f6z\u00fcm sunar.<\/p>\n<p>Ancak, hassas verileri depolamaktan ka\u00e7\u0131nmak, depolama limitlerine dikkat etmek ve performans \u00fczerindeki potansiyel etkilerini g\u00f6z \u00f6n\u00fcnde bulundurmak, <code>localStorage<\/code>'\u0131 g\u00fcvenli ve verimli bir \u015fekilde kullanman\u0131n anahtar\u0131d\u0131r. Daha karma\u015f\u0131k ve b\u00fcy\u00fck veri setleri i\u00e7in <code>IndexedDB<\/code> gibi alternatifleri de\u011ferlendirmek \u00f6nemli olsa da, \u00e7o\u011fu front-end geli\u015ftiricisinin ara\u00e7 setinde <code>localStorage<\/code>'\u0131n yeri sabittir. Bu g\u00fc\u00e7l\u00fc ve eri\u015filebilir taray\u0131c\u0131 \u00f6zelli\u011fini ustaca kullanarak, kullan\u0131c\u0131lar\u0131n\u0131z i\u00e7in daha h\u0131zl\u0131, daha ak\u0131ll\u0131 ve daha ki\u015fiselle\u015ftirilmi\u015f web deneyimleri yaratabilirsiniz.<\/p>\n<h3>S\u0131k\u00e7a Sorulan Sorular (SSS)<\/h3>\n<p><strong>1. localStorage'da depolayabilece\u011fim maksimum veri miktar\u0131 nedir?<\/strong><\/p>\n<p><code>localStorage<\/code>'\u0131n depolama limiti taray\u0131c\u0131ya ve i\u015fletim sistemine g\u00f6re de\u011fi\u015fmekle birlikte, genellikle 5 MB ile 10 MB aras\u0131ndad\u0131r. Bu miktar, \u00e7o\u011fu kullan\u0131c\u0131 tercihi veya sepet bilgisi gibi senaryolar i\u00e7in yeterlidir. Ancak, limit a\u015f\u0131ld\u0131\u011f\u0131nda bir <code>QuotaExceededError<\/code> hatas\u0131 f\u0131rlat\u0131l\u0131r, bu nedenle hata y\u00f6netimi \u00f6nemlidir.<\/p>\n<p><strong>2. localStorage'daki veriler ne kadar s\u00fcreyle saklan\u0131r?<\/strong><\/p>\n<p><code>localStorage<\/code>'daki veriler kal\u0131c\u0131d\u0131r. Yani kullan\u0131c\u0131 taray\u0131c\u0131s\u0131n\u0131 kapatsa, bilgisayar\u0131n\u0131 yeniden ba\u015flatsa veya internet ba\u011flant\u0131s\u0131 olmasa bile veriler silinmez. Ancak, kullan\u0131c\u0131 taray\u0131c\u0131 \u00f6nbelle\u011fini veya site verilerini manuel olarak temizlerse ya da uygulama kodu taraf\u0131ndan silinirse veriler kaybolur.<\/p>\n<p><strong>3. localStorage hassas bilgiler (\u015fifreler, tokenlar) depolamak i\u00e7in g\u00fcvenli midir?<\/strong><\/p>\n<p>Hay\u0131r, <code>localStorage<\/code> hassas bilgiler depolamak i\u00e7in g\u00fcvenli de\u011fildir. JavaScript ile kolayca eri\u015filebilir olmas\u0131 nedeniyle, bir XSS (Cross-Site Scripting) sald\u0131r\u0131s\u0131 durumunda sald\u0131rganlar bu bilgilere rahatl\u0131kla ula\u015fabilir. Hassas veriler i\u00e7in <code>HTTPOnly<\/code> ve <code>Secure<\/code> bayraklar\u0131yla ayarlanm\u0131\u015f \u00e7erezler veya sunucu taraf\u0131 oturum y\u00f6netimi gibi daha g\u00fcvenli y\u00f6ntemler tercih edilmelidir.<\/p>\n<p><strong>4. localStorage'a sadece string veriler mi kaydedilebilir?<\/strong><\/p>\n<p>Evet, <code>localStorage<\/code> sadece string (metin) verileri anahtar-de\u011fer \u00e7iftleri halinde depolayabilir. Ancak, JSON objesini kullanarak karma\u015f\u0131k JavaScript objelerini (say\u0131lar, boolean'lar, diziler, di\u011fer objeler) \u00f6nce <code>JSON.stringify()<\/code> ile string'e d\u00f6n\u00fc\u015ft\u00fcrerek kaydedebilir, ard\u0131ndan <code>JSON.parse()<\/code> ile geri okuyarak orijinal objeye \u00e7evirebilirsiniz.<\/p>\n<p><strong>5. localStorage ile sessionStorage aras\u0131ndaki temel fark nedir?<\/strong><\/p>\n<p>Temel fark kal\u0131c\u0131l\u0131kt\u0131r. <code>localStorage<\/code>'daki veriler kal\u0131c\u0131d\u0131r ve taray\u0131c\u0131 kapat\u0131lsa bile silinmez. <code>sessionStorage<\/code>'daki veriler ise sadece mevcut oturum s\u00fcresince (taray\u0131c\u0131 sekmesi veya penceresi kapat\u0131lana kadar) kal\u0131r ve oturum sona erdi\u011finde otomatik olarak silinir. Her ikisi de ayn\u0131 JavaScript API'sini kullan\u0131r ve kapasiteleri benzerdir (5-10 MB).<\/p>\n","protected":false},"excerpt":{"rendered":"localStorage: Taray\u0131c\u0131da Veri Saklaman\u0131n En Basit Yolu Web uygulamalar\u0131n\u0131zda kullan\u0131c\u0131 deneyimini zenginle\u015ftirmek, performans\u0131 art\u0131rmak veya basit veri saklama&hellip;","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1],"tags":[],"class_list":{"0":"post-34180","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-genel","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>localStorage Nedir ve Neden Her Frontend Geli\u015ftiricisi Bilmeli?<\/title>\n<meta name=\"description\" content=\"Web uygulamalar\u0131n\u0131zda kullan\u0131c\u0131 deneyimini zenginle\u015ftirmek, performans\u0131 art\u0131rmak veya basit veri saklama ihtiya\u00e7lar\u0131n\u0131z\u0131 kar\u015f\u0131lamak istedi\u011finizde akl\u0131n\u0131za ilk ne gelir? Kullan\u0131c\u0131 tercihlerini hat\u0131rlamak, sepet bilgilerini kaydetmek veya \u00e7evrimd\u0131\u015f\u0131 kullan\u0131m i\u00e7in baz\u0131 verileri depolamak, modern web uygulamalar\u0131n\u0131n olmazsa olmaz\u0131d\u0131r. \u0130\u015fte tam bu noktada, localStorage devreye giriyor. Bir\u00e7ok front-end geli\u015ftiricisinin g\u00f6z ard\u0131 etmemesi gereken, basit ancak g\u00fc\u00e7l\u00fc bu taray\u0131c\u0131 \u00f6zelli\u011fi, kullan\u0131c\u0131 tarafl\u0131 veri depolama konusunda en eri\u015filebilir \u00e7\u00f6z\u00fcmlerden biridir. Bu makale, localStorage&#039;\u0131n ne oldu\u011fundan, nas\u0131l kullan\u0131ld\u0131\u011f\u0131na, potansiyel tuzaklar\u0131na ve en iyi uygulamalar\u0131na kadar her \u015feyi ad\u0131m ad\u0131m a\u00e7\u0131klayarak sizi bu konuda usta bir hale getirmeyi hedefliyor. Gelin, taray\u0131c\u0131da veri saklaman\u0131n bu etkili yolunu derinlemesine ke\u015ffedelim.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/localstorage-nedir-ve-neden-her-frontend-gelistiricisi-bilmeli\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"localStorage Nedir ve Neden Her Frontend Geli\u015ftiricisi Bilmeli?\" \/>\n<meta property=\"og:description\" content=\"Web uygulamalar\u0131n\u0131zda kullan\u0131c\u0131 deneyimini zenginle\u015ftirmek, performans\u0131 art\u0131rmak veya basit veri saklama ihtiya\u00e7lar\u0131n\u0131z\u0131 kar\u015f\u0131lamak istedi\u011finizde akl\u0131n\u0131za ilk ne gelir? Kullan\u0131c\u0131 tercihlerini hat\u0131rlamak, sepet bilgilerini kaydetmek veya \u00e7evrimd\u0131\u015f\u0131 kullan\u0131m i\u00e7in baz\u0131 verileri depolamak, modern web uygulamalar\u0131n\u0131n olmazsa olmaz\u0131d\u0131r. \u0130\u015fte tam bu noktada, localStorage devreye giriyor. Bir\u00e7ok front-end geli\u015ftiricisinin g\u00f6z ard\u0131 etmemesi gereken, basit ancak g\u00fc\u00e7l\u00fc bu taray\u0131c\u0131 \u00f6zelli\u011fi, kullan\u0131c\u0131 tarafl\u0131 veri depolama konusunda en eri\u015filebilir \u00e7\u00f6z\u00fcmlerden biridir. Bu makale, localStorage&#039;\u0131n ne oldu\u011fundan, nas\u0131l kullan\u0131ld\u0131\u011f\u0131na, potansiyel tuzaklar\u0131na ve en iyi uygulamalar\u0131na kadar her \u015feyi ad\u0131m ad\u0131m a\u00e7\u0131klayarak sizi bu konuda usta bir hale getirmeyi hedefliyor. Gelin, taray\u0131c\u0131da veri saklaman\u0131n bu etkili yolunu derinlemesine ke\u015ffedelim.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/localstorage-nedir-ve-neden-her-frontend-gelistiricisi-bilmeli\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-11-12T07:31:08+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"25 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/localstorage-nedir-ve-neden-her-frontend-gelistiricisi-bilmeli\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/localstorage-nedir-ve-neden-her-frontend-gelistiricisi-bilmeli\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"localStorage Nedir ve Neden Her Frontend Geli\u015ftiricisi Bilmeli?\",\"datePublished\":\"2025-11-12T07:31:08+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/localstorage-nedir-ve-neden-her-frontend-gelistiricisi-bilmeli\/\"},\"wordCount\":3860,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/localstorage-nedir-ve-neden-her-frontend-gelistiricisi-bilmeli\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/localstorage-nedir-ve-neden-her-frontend-gelistiricisi-bilmeli\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/localstorage-nedir-ve-neden-her-frontend-gelistiricisi-bilmeli\/\",\"name\":\"localStorage Nedir ve Neden Her Frontend Geli\u015ftiricisi Bilmeli?\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-11-12T07:31:08+00:00\",\"description\":\"Web uygulamalar\u0131n\u0131zda kullan\u0131c\u0131 deneyimini zenginle\u015ftirmek, performans\u0131 art\u0131rmak veya basit veri saklama ihtiya\u00e7lar\u0131n\u0131z\u0131 kar\u015f\u0131lamak istedi\u011finizde akl\u0131n\u0131za ilk ne gelir? Kullan\u0131c\u0131 tercihlerini hat\u0131rlamak, sepet bilgilerini kaydetmek veya \u00e7evrimd\u0131\u015f\u0131 kullan\u0131m i\u00e7in baz\u0131 verileri depolamak, modern web uygulamalar\u0131n\u0131n olmazsa olmaz\u0131d\u0131r. \u0130\u015fte tam bu noktada, localStorage devreye giriyor. Bir\u00e7ok front-end geli\u015ftiricisinin g\u00f6z ard\u0131 etmemesi gereken, basit ancak g\u00fc\u00e7l\u00fc bu taray\u0131c\u0131 \u00f6zelli\u011fi, kullan\u0131c\u0131 tarafl\u0131 veri depolama konusunda en eri\u015filebilir \u00e7\u00f6z\u00fcmlerden biridir. Bu makale, localStorage'\u0131n ne oldu\u011fundan, nas\u0131l kullan\u0131ld\u0131\u011f\u0131na, potansiyel tuzaklar\u0131na ve en iyi uygulamalar\u0131na kadar her \u015feyi ad\u0131m ad\u0131m a\u00e7\u0131klayarak sizi bu konuda usta bir hale getirmeyi hedefliyor. Gelin, taray\u0131c\u0131da veri saklaman\u0131n bu etkili yolunu derinlemesine ke\u015ffedelim.\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/localstorage-nedir-ve-neden-her-frontend-gelistiricisi-bilmeli\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/localstorage-nedir-ve-neden-her-frontend-gelistiricisi-bilmeli\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/localstorage-nedir-ve-neden-her-frontend-gelistiricisi-bilmeli\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"localStorage Nedir ve Neden Her Frontend Geli\u015ftiricisi Bilmeli?\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"localStorage Nedir ve Neden Her Frontend Geli\u015ftiricisi Bilmeli?","description":"Web uygulamalar\u0131n\u0131zda kullan\u0131c\u0131 deneyimini zenginle\u015ftirmek, performans\u0131 art\u0131rmak veya basit veri saklama ihtiya\u00e7lar\u0131n\u0131z\u0131 kar\u015f\u0131lamak istedi\u011finizde akl\u0131n\u0131za ilk ne gelir? Kullan\u0131c\u0131 tercihlerini hat\u0131rlamak, sepet bilgilerini kaydetmek veya \u00e7evrimd\u0131\u015f\u0131 kullan\u0131m i\u00e7in baz\u0131 verileri depolamak, modern web uygulamalar\u0131n\u0131n olmazsa olmaz\u0131d\u0131r. \u0130\u015fte tam bu noktada, localStorage devreye giriyor. Bir\u00e7ok front-end geli\u015ftiricisinin g\u00f6z ard\u0131 etmemesi gereken, basit ancak g\u00fc\u00e7l\u00fc bu taray\u0131c\u0131 \u00f6zelli\u011fi, kullan\u0131c\u0131 tarafl\u0131 veri depolama konusunda en eri\u015filebilir \u00e7\u00f6z\u00fcmlerden biridir. Bu makale, localStorage'\u0131n ne oldu\u011fundan, nas\u0131l kullan\u0131ld\u0131\u011f\u0131na, potansiyel tuzaklar\u0131na ve en iyi uygulamalar\u0131na kadar her \u015feyi ad\u0131m ad\u0131m a\u00e7\u0131klayarak sizi bu konuda usta bir hale getirmeyi hedefliyor. Gelin, taray\u0131c\u0131da veri saklaman\u0131n bu etkili yolunu derinlemesine ke\u015ffedelim.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/localstorage-nedir-ve-neden-her-frontend-gelistiricisi-bilmeli\/","og_locale":"tr_TR","og_type":"article","og_title":"localStorage Nedir ve Neden Her Frontend Geli\u015ftiricisi Bilmeli?","og_description":"Web uygulamalar\u0131n\u0131zda kullan\u0131c\u0131 deneyimini zenginle\u015ftirmek, performans\u0131 art\u0131rmak veya basit veri saklama ihtiya\u00e7lar\u0131n\u0131z\u0131 kar\u015f\u0131lamak istedi\u011finizde akl\u0131n\u0131za ilk ne gelir? Kullan\u0131c\u0131 tercihlerini hat\u0131rlamak, sepet bilgilerini kaydetmek veya \u00e7evrimd\u0131\u015f\u0131 kullan\u0131m i\u00e7in baz\u0131 verileri depolamak, modern web uygulamalar\u0131n\u0131n olmazsa olmaz\u0131d\u0131r. \u0130\u015fte tam bu noktada, localStorage devreye giriyor. Bir\u00e7ok front-end geli\u015ftiricisinin g\u00f6z ard\u0131 etmemesi gereken, basit ancak g\u00fc\u00e7l\u00fc bu taray\u0131c\u0131 \u00f6zelli\u011fi, kullan\u0131c\u0131 tarafl\u0131 veri depolama konusunda en eri\u015filebilir \u00e7\u00f6z\u00fcmlerden biridir. Bu makale, localStorage'\u0131n ne oldu\u011fundan, nas\u0131l kullan\u0131ld\u0131\u011f\u0131na, potansiyel tuzaklar\u0131na ve en iyi uygulamalar\u0131na kadar her \u015feyi ad\u0131m ad\u0131m a\u00e7\u0131klayarak sizi bu konuda usta bir hale getirmeyi hedefliyor. Gelin, taray\u0131c\u0131da veri saklaman\u0131n bu etkili yolunu derinlemesine ke\u015ffedelim.","og_url":"https:\/\/fatihsoysal.com\/blog\/localstorage-nedir-ve-neden-her-frontend-gelistiricisi-bilmeli\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-11-12T07:31:08+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"25 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/localstorage-nedir-ve-neden-her-frontend-gelistiricisi-bilmeli\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/localstorage-nedir-ve-neden-her-frontend-gelistiricisi-bilmeli\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"localStorage Nedir ve Neden Her Frontend Geli\u015ftiricisi Bilmeli?","datePublished":"2025-11-12T07:31:08+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/localstorage-nedir-ve-neden-her-frontend-gelistiricisi-bilmeli\/"},"wordCount":3860,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/localstorage-nedir-ve-neden-her-frontend-gelistiricisi-bilmeli\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/localstorage-nedir-ve-neden-her-frontend-gelistiricisi-bilmeli\/","url":"https:\/\/fatihsoysal.com\/blog\/localstorage-nedir-ve-neden-her-frontend-gelistiricisi-bilmeli\/","name":"localStorage Nedir ve Neden Her Frontend Geli\u015ftiricisi Bilmeli?","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-11-12T07:31:08+00:00","description":"Web uygulamalar\u0131n\u0131zda kullan\u0131c\u0131 deneyimini zenginle\u015ftirmek, performans\u0131 art\u0131rmak veya basit veri saklama ihtiya\u00e7lar\u0131n\u0131z\u0131 kar\u015f\u0131lamak istedi\u011finizde akl\u0131n\u0131za ilk ne gelir? Kullan\u0131c\u0131 tercihlerini hat\u0131rlamak, sepet bilgilerini kaydetmek veya \u00e7evrimd\u0131\u015f\u0131 kullan\u0131m i\u00e7in baz\u0131 verileri depolamak, modern web uygulamalar\u0131n\u0131n olmazsa olmaz\u0131d\u0131r. \u0130\u015fte tam bu noktada, localStorage devreye giriyor. Bir\u00e7ok front-end geli\u015ftiricisinin g\u00f6z ard\u0131 etmemesi gereken, basit ancak g\u00fc\u00e7l\u00fc bu taray\u0131c\u0131 \u00f6zelli\u011fi, kullan\u0131c\u0131 tarafl\u0131 veri depolama konusunda en eri\u015filebilir \u00e7\u00f6z\u00fcmlerden biridir. Bu makale, localStorage'\u0131n ne oldu\u011fundan, nas\u0131l kullan\u0131ld\u0131\u011f\u0131na, potansiyel tuzaklar\u0131na ve en iyi uygulamalar\u0131na kadar her \u015feyi ad\u0131m ad\u0131m a\u00e7\u0131klayarak sizi bu konuda usta bir hale getirmeyi hedefliyor. Gelin, taray\u0131c\u0131da veri saklaman\u0131n bu etkili yolunu derinlemesine ke\u015ffedelim.","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/localstorage-nedir-ve-neden-her-frontend-gelistiricisi-bilmeli\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/localstorage-nedir-ve-neden-her-frontend-gelistiricisi-bilmeli\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/localstorage-nedir-ve-neden-her-frontend-gelistiricisi-bilmeli\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"localStorage Nedir ve Neden Her Frontend Geli\u015ftiricisi Bilmeli?"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/34180","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=34180"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/34180\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=34180"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=34180"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=34180"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}