JavaScript ve Çerezler
Bu makale, JavaScript ve çerezleri açıklar.
Çerezlerin temellerinden, okuma ve yazmadan, güvenliğe ve pratik örneklere kadar her şeyi adım adım dikkatlice açıklayacağız.
YouTube Video
javascript-cookie.html
1<!DOCTYPE html>
2<html lang="en">
3<head>
4 <meta charset="UTF-8">
5 <title>JavaScript & HTML</title>
6 <style>
7 * {
8 box-sizing: border-box;
9 }
10
11 body {
12 margin: 0;
13 padding: 1em;
14 padding-bottom: 10em;
15 font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
16 background-color: #f7f9fc;
17 color: #333;
18 line-height: 1.6;
19 }
20
21 .container {
22 max-width: 800px;
23 margin: 0 auto;
24 padding: 1em;
25 background-color: #ffffff;
26 border: 1px solid #ccc;
27 border-radius: 10px;
28 box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05);
29 }
30
31 .container-flex {
32 display: flex;
33 flex-wrap: wrap;
34 gap: 2em;
35 max-width: 1000px;
36 margin: 0 auto;
37 padding: 1em;
38 background-color: #ffffff;
39 border: 1px solid #ccc;
40 border-radius: 10px;
41 box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05);
42 }
43
44 .left-column, .right-column {
45 flex: 1 1 200px;
46 min-width: 200px;
47 }
48
49 h1, h2 {
50 font-size: 1.2rem;
51 color: #007bff;
52 margin-top: 0.5em;
53 margin-bottom: 0.5em;
54 border-left: 5px solid #007bff;
55 padding-left: 0.6em;
56 background-color: #e9f2ff;
57 }
58
59 button {
60 display: block;
61 margin: 1em auto;
62 padding: 0.75em 1.5em;
63 font-size: 1rem;
64 background-color: #007bff;
65 color: white;
66 border: none;
67 border-radius: 6px;
68 cursor: pointer;
69 transition: background-color 0.3s ease;
70 }
71
72 button:hover {
73 background-color: #0056b3;
74 }
75
76 #output {
77 margin-top: 1em;
78 background-color: #1e1e1e;
79 color: #0f0;
80 padding: 1em;
81 border-radius: 8px;
82 min-height: 200px;
83 font-family: Consolas, monospace;
84 font-size: 0.95rem;
85 overflow-y: auto;
86 white-space: pre-wrap;
87 }
88
89 .highlight {
90 outline: 3px solid #ffc107; /* yellow border */
91 background-color: #fff8e1; /* soft yellow background */
92 transition: background-color 0.3s ease, outline 0.3s ease;
93 }
94
95 .active {
96 background-color: #28a745; /* green background */
97 color: #fff;
98 box-shadow: 0 0 10px rgba(40, 167, 69, 0.5);
99 transition: background-color 0.3s ease, box-shadow 0.3s ease;
100 }
101 </style>
102</head>
103<body>
104 <div class="container">
105 <h1>JavaScript Console</h1>
106 <button id="executeBtn">Execute</button>
107 <div id="output"></div>
108 </div>
109
110 <script>
111 // Override console.log to display messages in the #output element
112 (function () {
113 // Override console.log
114 const originalLog = console.log;
115 console.log = function (...args) {
116 originalLog.apply(console, args);
117 const message = document.createElement('div');
118 message.textContent = args.map(String).join(' ');
119 output.appendChild(message);
120 };
121
122 // Override console.error
123 const originalError = console.error;
124 console.error = function (...args) {
125 originalError.apply(console, args);
126 const message = document.createElement('div');
127 message.textContent = args.map(String).join(' ');
128 message.style.color = 'red'; // Color error messages red
129 output.appendChild(message);
130 };
131 })();
132
133 document.getElementById('executeBtn').addEventListener('click', () => {
134 // Prevent multiple loads
135 if (document.getElementById('externalScript')) return;
136
137 const script = document.createElement('script');
138 script.src = 'javascript-cookie.js';
139 script.id = 'externalScript';
140 //script.onload = () => console.log('javascript-cookie.js loaded and executed.');
141 //script.onerror = () => console.log('Failed to load javascript-cookie.js.');
142 document.body.appendChild(script);
143 });
144 </script>
145</body>
146</html>JavaScript ve Çerezler
Çerez, kullanıcının tarayıcısında saklanan küçük veri parçalarını ifade eder. Bunlar, esas olarak aşağıdaki amaçlar için kullanılır:.
- Kullanıcı kimlik doğrulaması (giriş durumunun korunması)
- Kullanıcı ayarlarının kaydedilmesi (dil, tema vb.)
- Takip (tarama geçmişi vb.)
JavaScript'te, çerezleri document.cookie kullanarak okuyabilir ve yazabilirsiniz.
Çerez oluşturma (yazma)
Çerezler aşağıdaki sözdizimi ile oluşturulur:.
1document.cookie = "username=JohnDoe";- Bu kod, tarayıcıda
"username=JohnDoe"adlı bir çerezi kaydeder.
Son kullanma tarihine sahip çerezler oluşturma
Çerezlere bir son kullanma tarihi ayarlanabilir. Eğer bir son kullanma tarihi ayarlanmazsa, bu oturum çerezi olarak kabul edilir ve tarayıcı kapatıldığında silinir.
1const date = new Date();
2date.setTime(date.getTime() + (7 * 24 * 60 * 60 * 1000)); // 7 days
3const cookieText = "username=JohnDoe; expires=" + date.toUTCString() + "; path=/; SameSite=None; Secure"
4document.cookie = cookieText;
5console.log(`Cookie Text : ${cookieText}`);
6console.log(`Cookie Value : ${document.cookie}`);expiresniteliği, çerezin son kullanma tarihini UTC formatında belirtir.pathniteliği, çerezin gönderileceği yolu belirtir./tüm siteyi ifade eder.SameSite=Nonebelirtirseniz,Cookieçapraz site isteklerinde bile gönderilir. Ancak bu durumda, her zamanSecureniteliğini eklemeniz gerekir.Securebelirtmek,Cookienin yalnızca HTTPS iletişimine kısıtlanmasını sağlar ve güvenliği artırır.document.cookiebaşvurusu ile mevcut sayfadaki tümCookieleri bir dize olarak alabilirsiniz.console.logkullanarak tarayıcıda ayarlanmış gerçekCookiedeğerleri ile alınabilen değerler arasındaki farkı kontrol edebilirsiniz.
Çerezleri alma (okuma)
Tüm çerezleri document.cookie ile bir dize olarak alabilirsiniz.
1const date = new Date();
2date.setTime(date.getTime() + (7 * 24 * 60 * 60 * 1000)); // 7 days
3document.cookie = "theme=dark; expires=" + date.toUTCString() + "; path=/; SameSite=None; Secure"
4
5console.log(document.cookie);
6// Output: "username=JohnDoe; theme=dark"
document.cookie'nin dönüş değeri, tümCookielerin 'anahtar=değer;' formatında birleştirildiği tek bir dizedir.- Bu dizeyi ayrıştırmak ve istenilen değeri çıkartmak için bir fonksiyon kullanmak faydalıdır.
Bir çerezin değerini almak için fonksiyon
1function getCookie(name) {
2 const cookies = document.cookie.split('; ');
3 for (const cookie of cookies) {
4 const [key, value] = cookie.split('=');
5 if (key === name) {
6 return decodeURIComponent(value);
7 }
8 }
9 return null;
10}
11
12console.log(getCookie("username")); // "JohnDoe"
- Bu fonksiyon,
split()kullanarak anahtar ve değerleri böler ve belirtilen anahtarla eşleşirse değeri döndürür. decodeURIComponentkullanarak kodlanmış karakterleri doğru şekilde alabilirsiniz.- Eğer ilgili anahtar yoksa
nulldöner.
Çerezleri silme
Bir çerezi silmek için, son kullanma tarihini geçmiş bir zamana ayarlayabilirsiniz.
1document.cookie = "username=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/; SameSite=None; Secure";
2
3console.log(document.cookie);
4// Output: "theme=dark"
username'e boş bir değer atayıp son kullanma tarihini geçmişe ayarlayarak silmiş olursunuz.- Bir
Cookieyi silerken, oluşturulurken kullanılanpath,SameSiteveSecureniteliklerini de eşleştirmeniz gerekir. - Bu örnekte
usernamesilinir vetheme=darkgibi diğerCookieler kalır.
Çerez seçenekleri
Bir çerezin davranışını kontrol etmek için çeşitli seçenekler belirleyebilirsiniz. Başlıca olanlar şunlardır:.
-
expiresÇerezin son kullanma tarihini UTC formatında belirtir. Belirtilmezse, çerez bir oturum çerezi olur ve tarayıcı kapatıldığında silinir. -
max-ageÇerezin son kullanma tarihini saniye cinsinden belirtir. Bu,expiresüzerinde önceliğe sahiptir. -
pathÇerezin gönderileceği yolu belirtir. Örneğin,/adminbelirtirseniz, çerez yalnızca o yol altındaki sayfalara gönderilir. -
domainÇerezin geçerli olduğu alan adını belirtir. Genellikle mevcut alan adı için ayarlanır, fakat.example.comgibi tüm alt alan adlarına da uygulayabilirsiniz. -
secureBu özellik belirtildiğinde, çerez yalnızca HTTPS üzerinden gönderilir. Daha fazla güvenlik için, hassas bilgilerde bu özelliği mutlaka ayarlayın. -
SameSiteÇerezlerin siteler arası isteklerde gönderilip gönderilmeyeceğini kontrol eder. Aşağıdaki üç değerden birini belirtebilirsiniz:.-
StrictÇerezler yalnızca aynı siteden gelen isteklerde gönderilir. -
LaxÇerezler normal gezinmelerde gönderilir fakat bazı kısıtlamalar vardır. -
NoneÇerezler, siteler arası isteklerde bile gönderilebilir. Ancak,Secureniteliği de gereklidir.
-
Örnek: Güvenli çerez
1document.cookie = "sessionId=abc123; secure; SameSite=Strict";securebelirtirseniz,Cookieyalnızca HTTPS iletişiminde gönderilir.SameSite=Strictbelirtirseniz,Cookieçapraz site isteklerinde gönderilmez ve bu, CSRF önlemi olarak etkilidir.- Kimlik doğrulama veya oturum yönetimi için kullanılan önemli
Cookieler için bu tür güvenli nitelikler gereklidir.
Kodlama ve kod çözme
Çerez değerleri özel karakterler içerebileceğinden, encodeURIComponent kullanmak daha güvenlidir.
1const date = new Date();
2date.setTime(date.getTime() + (7 * 24 * 60 * 60 * 1000)); // 7 days
3
4const username = "JohnDoe";
5document.cookie =
6 "username=" + encodeURIComponent(username) +
7 "; max-age=604800; path=/; SameSite=None; Secure";
8
9console.log(decodeURIComponent(getCookie("username"))); // "JohnDoe"
encodeURIComponentkullanarak birCookiede boşluk, sembol gibi karakterleri güvenli şekilde depolayabilirsiniz.- Okurken, orijinal dizeyi geri elde etmek için
decodeURIComponentkullanın. - Bu örnekte, son kullanma süresini 7 gün (604.800 saniye) olarak ayarlamak için
max-age=604800kullanılmıştır. Bu, son kullanma tarihini belirtmek içinexpirese benzer bir yöntemdir.max-agesaniye cinsinden belirtilebilir ve genellikle kullanımı daha kolaydır.
Pratik örnek: Bir temanın kaydedilmesi ve yüklenmesi
Aşağıda, kullanıcının seçtiği temanın bir çereze kaydedilip bir sonraki ziyarette otomatik olarak uygulanmasının örneği yer almaktadır.
1function setTheme(theme) {
2 document.cookie =
3 "theme=" + encodeURIComponent(theme) +
4 "; max-age=604800; path=/; SameSite=None; Secure"; // 1 week
5 applyTheme(theme);
6}
7
8function applyTheme(theme) {
9 document.body.style.backgroundColor = theme === "dark" ? "#333" : "#fff";
10 document.body.style.color = theme === "dark" ? "#fff" : "#000";
11}
12
13function getCookie(name) {
14 const cookies = document.cookie.split('; ');
15 for (const cookie of cookies) {
16 const [key, value] = cookie.split('=');
17 if (key === name) {
18 return decodeURIComponent(value);
19 }
20 }
21 return null;
22}
23
24const savedTheme = getCookie("theme");
25if (savedTheme) {
26 applyTheme(savedTheme);
27}1<button onclick="setTheme('light')">Light</button>
2<button onclick="setTheme('dark')">Dark</button>setThemefonksiyonu seçili temayı birCookieye kaydeder ve hemen ekranı güncellemek içinapplyTheme'i çağırır.applyThemefonksiyonu,bodynin arka plan ve metin renklerini temaya göre değiştirir.- Bu örnekte,
max-age=604800ayarlandığı için tema ayarı bir hafta boyunca korunur. - Kullanıcının seçimi sayfa tekrar ziyaret edildiğinde korunabildiği için, kullanıcı deneyimi (UX) geliştirilir.
Çerez sınırlamaları ve dikkat edilmesi gerekenler
Çerez kullanırken aşağıdaki noktalara dikkat edin:.
-
Boyut Sınırlamaları Tek bir çerezin boyutu yaklaşık 4KB ile sınırlıdır.
-
Kaydedilebilecek çerez sayısı sınırı Tarayıcıya bağlı olarak, bir alan adı başına yalnızca yaklaşık 20 ila 50 adet kaydedebilirsiniz.
-
Güvenlik Önlemleri
Cookieiçeriği temel olarak düz metin olarak saklandığından, şifre gibi gizli bilgilerin depolanması için uygun değildir. -
JavaScript'ten erişilemeyen Çerezler
HttpOnlyözelliğine sahip çerezler, güvenlik nedeniyle JavaScript tarafından okunamaz.
Sunucu ve Cookieler
1Set-Cookie: sessionId=abc123; HttpOnly; Secure; SameSite=StrictHttpOnly gibi bazı Cookie öznitelikleri JavaScript üzerinden ayarlanamaz. Bunlar sunucu tarafında ayarlanmalıdır.
Özet
JavaScript ile Cookieleri yönetmek, kullanıcı deneyimini artırabilir ve durumu koruyabilir. Ancak, onları güvenli ve uygun şekilde ele almak için lütfen aşağıdaki noktalara dikkat edin.
-
Yalnızca gerekli minimum bilgiyi saklayın Gizlilik ve güvenlik açısından, kişisel veya hassas bilgilerden kaçının ve yalnızca gerekli verileri kaydedin.
-
Güvenlik özniteliklerini doğru şekilde ayarlayın XSS ve CSRF gibi siteler arası saldırıları önlemek için
SecureveSameSitegibi öznitelikleri ayarlayın. -
Veri Kodlama ve Çözme
Cookiedeğerlerini güvenli bir şekilde saklayıp okumak ve özel karakterler ile Japonca gibi dilleri doğru bir şekilde işlemek içinencodeURIComponentvedecodeURIComponentkullanın.
Cookieleri doğru bir şekilde kullanmayı öğrenerek, daha gelişmiş ve güvenli web uygulamaları oluşturabilirsiniz.
Yukarıdaki makaleyi, YouTube kanalımızda Visual Studio Code'u kullanarak takip edebilirsiniz. Lütfen YouTube kanalını da kontrol edin.