JavaScript at Cookies
Ipinaliwanag ng artikulong ito ang JavaScript at cookies.
Maingat naming ipapaliwanag ang lahat nang sunod-sunod, mula sa mga pangunahing kaalaman tungkol sa cookies, pagbabasa at pagsusulat, seguridad, hanggang sa mga praktikal na halimbawa.
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 at Cookies
Ang Cookie
ay tumutukoy sa maliliit na bahagi ng data na nakaimbak sa browser ng gumagamit. Pangunahing ginagamit ang mga ito para sa mga sumusunod na layunin:.
- User authentication (pagpapanatili ng estado ng pag-login)
- Pagsasa-save ng mga setting ng user (wika, tema, at iba pa)
- Pagsubaybay (kasaysayan ng pag-browse, atbp.)
Sa JavaScript, maaari kang magbasa at magsulat ng cookies gamit ang document.cookie
.
Paglikha (pagsusulat) ng cookies
Ang cookies ay nililikha gamit ang sumusunod na syntax:.
1document.cookie = "username=JohnDoe";
- Ang code na ito ay nagsa-save ng cookie na may pangalan na
"username=JohnDoe"
sa browser.
Paglikha ng cookies na may petsa ng pag-expire
Maaaring magkaroon ng petsa ng pag-expire ang cookies. Kung walang itinakdang petsa ng pag-expire, itinuturing ito bilang isang session cookie at nabubura kapag isinara ang browser.
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}`);
- Ang katangiang
expires
ay nagtatalaga ng petsa ng pag-expire ng cookie sa format na UTC. - Ang katangiang
path
ay nagtatalaga ng landas kung saan ipapadala ang cookie./
ay nangangahulugang para sa buong site. - Kung itatakda mo ang
SameSite=None
, angCookie
ay ipapadala kahit sa mga cross-site na kahilingan. Gayunpaman, sa kasong ito, kailangan mong palaging isama angSecure
na attribute. - Ang pagtatakda ng
Secure
ay nililimitahan angCookie
sa HTTPS na komunikasyon lamang, kaya't mas ligtas ito. - Sa pamamagitan ng pagtukoy sa
document.cookie
, makukuha mo ang lahat ngCookie
na mayroon sa kasalukuyang pahina bilang isang string. - Gamit ang
console.log
, maaari mong suriin ang pagkakaiba ng aktuwal na mga halaga ngCookie
na itinakda sa browser at ang mga halagang maaaring makuha.
Pagkuha (pagbabasa) ng cookies
Maaari mong makuha lahat ng cookies bilang isang string gamit ang document.cookie
.
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"
- Ang ibinabalik na halaga ng
document.cookie
ay isang string kung saan lahat ngCookie
ay pinapagsama sa anyong 'key=value;
'. - Mainam gamitin ang isang function para i-parse ang string na ito at kunin ang nais na halaga.
Function para kunin ang halaga ng isang cookie
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"
- Hinahati ng function na ito ang mga key at value gamit ang
split()
at ibinabalik ang value kung ito ay tugma sa tinukoy na key. - Sa pamamagitan ng paggamit ng
decodeURIComponent
, maaari mong tama na makuha ang mga naka-encode na character. - Kung ang kaukulang key ay wala, magbabalik ito ng
null
.
Pagbubura ng cookies
Mabubura ang isang cookie sa pamamagitan ng pagtatakda ng petsa ng pag-expire nito sa nakaraan.
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"
- Kung bibigyan mo ng walang laman na value ang
username
at i-set ang expiration date sa nakaraan, ito ay mabubura. - Kapag magbubura ng isang
Cookie
, dapat rin na tumugma angpath
,SameSite
, atSecure
na mga attribute sa ginamit noong ito ay nilikha. - Sa halimbawang ito, ang
username
ay natanggal, at ang ibangCookie
gaya ngtheme=dark
ay nananatili.
Mga opsyon para sa cookie
Maaari kang magtakda ng iba't ibang opsyon upang kontrolin ang kilos ng cookie. Ang pangunahing mga opsyon ay ang mga sumusunod:.
Nagtatalaga ng petsa ng pag-expire ng cookie sa format na UTC. Kung hindi itinakda, ang cookie ay magiging isang session cookie at mabubura kapag isinara ang browser.
Nagtatalaga ng expiration ng cookie sa bilang ng segundo. Mas inuuna ito kaysa sa `expires`.
Tinutukoy ang path kung saan ipapadala ang cookie. Halimbawa, kung ang iyong itinakda ay `/admin`, ang cookie ay ipapadala lamang sa mga pahina sa ilalim ng path na iyon.
Tinutukoy ang domain kung saan magiging valid ang cookie. Kadalasan, ito ay itinatalaga sa kasalukuyang domain, pero maaari mo rin itong itakda para sa lahat ng subdomain, gaya ng `.example.com`.
Kapag itinakda ang katangiang ito, ang cookie ay ipapadala lamang sa pamamagitan ng HTTPS. Para sa mas mataas na seguridad, laging itakda ang katangiang ito para sa sensitibong impormasyon.
Kinokontrol kung ang cookies ay ipapadala sa mga cross-site na request. Maaari kang magtakda ng isa sa tatlong sumusunod na halaga:.
- `Strict`
Ipinapadala lamang ang cookies para sa request mula sa parehong site.
- `Lax`
Ipinapadala ang cookies para sa karaniwang navigation, ngunit may ilang limitasyon.
- `None`
Maaaring ipadala ang cookies kahit sa mga cross-site na request. Gayunpaman, kailangan ding itakda ang `Secure` na katangian.
Halimbawa: Secure na cookie
1document.cookie = "sessionId=abc123; secure; SameSite=Strict";
- Kung ilalagay mo ang
secure
, angCookie
ay ipapadala lamang gamit ang HTTPS na komunikasyon. - Kung itatakda mo ang
SameSite=Strict
, angCookie
ay hindi ipapadala para sa cross-site na kahilingan, kaya epektibo itong panlaban sa CSRF. - Ang mga secure na attribute na tulad nito ay mahalaga para sa mahahalagang
Cookie
na ginagamit para sa authentication o session management.
Encoding at decoding
Dahil maaaring may special na karakter ang halaga ng cookie, mas ligtas gamitin ang encodeURIComponent
.
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"
- Sa paggamit ng
encodeURIComponent
, maaari kang ligtas na mag-imbak ng spaces, mga simbolo, at iba pa sa isangCookie
. - Kapag binabasa ito, gamitin ang
decodeURIComponent
upang maibalik ang orihinal na string. - Sa halimbawang ito, ginagamit ang
max-age=604800
upang itakda ang expiration period sa 7 araw (604,800 segundo). Ito ay isang paraan ng pagtatakda ng expiration date, na kapareho ngexpires
. Angmax-age
ay maaaring itakda sa mga segundo at madalas ay mas madaling gamitin.
Praktikal na halimbawa: Pagsasa-save at paglo-load ng tema
Ang sumusunod ay isang halimbawa ng pagsasa-save ng napiling tema ng user sa cookie at awtomatikong paglalapat nito sa susunod na pagbisita.
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>
- Ang function na
setTheme
ay nagse-save ng napiling tema sa isangCookie
at agad na tinatawag angapplyTheme
upang i-update ang screen. - Ang function na
applyTheme
ay nagpapalit ng background at kulay ng teksto ngbody
ayon sa tema. - Sa halimbawang ito, dahil naka-set ang
max-age=604800
, ang tema ay mananatili para sa isang linggo. - Dahil ang napili ng user ay maaaring manatili kapag bumalik siya sa pahina, mas gumaganda ang UX.
Mga limitasyon at pag-iingat sa cookies
Maging maingat sa mga sumusunod na punto kapag gumagamit ng cookies:.
-
Mga Limitasyon sa Laki Ang laki ng isang cookie ay limitado sa humigit-kumulang 4KB.
-
Limitasyon sa dami ng cookies na maaari mong i-save Depende sa browser, maaari kang mag-save ng mga 20 hanggang 50 kada domain.
-
Mga Paunang Alerto sa Seguridad Ang nilalaman ng mga
Cookie
ay karaniwang naka-save sa plain text, kaya hindi ito angkop sa pag-imbak ng kumpidensyal na impormasyon tulad ng mga password. -
Cookies na hindi mababasa mula sa JavaScript Ang mga
Cookie
na mayHttpOnly
na attribute ay hindi mababasa mula sa JavaScript para sa seguridad.
Server at mga Cookie
1Set-Cookie: sessionId=abc123; HttpOnly; Secure; SameSite=Strict
Ang ilang mga attribute ng Cookie
gaya ng HttpOnly
ay hindi maaring itakda gamit ang JavaScript. Kailangang itakda ang mga ito sa server side.
Buod
Ang pag-manipula ng mga Cookie
gamit ang JavaScript ay maaaring mapabuti ang karanasan ng user at mapanatili ang estado. Gayunpaman, tandaan ang mga sumusunod na punto upang ligtas at maayos ang paghawak nito.
-
Mag-imbak lamang ng pinakakaunting kinakailangang impormasyon Mula sa pananaw ng privacy at seguridad, iwasan ang pag-imbak ng personal o sensitibong impormasyon at itala lamang ang kinakailangang data.
-
Tamang-tama ang paglagay ng security attributes Ilagay ang mga attribute gaya ng
Secure
atSameSite
upang maiwasan ang cross-site attacks tulad ng XSS at CSRF. -
Pag-encode at Pag-decode ng Data Gamitin ang
encodeURIComponent
atdecodeURIComponent
upang ligtas na mag-imbak at magbasa ngCookie
values para ang mga espesyal na karakter at Japanese ay tama ang paghawak.
Sa pamamagitan ng pag-aaral ng tamang paggamit ng mga Cookie
, makakapagbuo ka ng mas advanced at ligtas na mga web application.
Maaari mong sundan ang artikulo sa itaas gamit ang Visual Studio Code sa aming YouTube channel. Paki-check din ang aming YouTube channel.