Web Storage در HTML5
بهنام نوبخت · ۱۴۰۵/۶/۲۸
تا اینجا بیشتر با قابلیتهایی آشنا شدیم که به ما کمک میکنند محتوای صفحه وب را ایجاد و مدیریت کنیم؛ اما در بسیاری از پروژهها لازم است برخی اطلاعات را در مرورگر کاربر نگهداری کنیم. برای مثال ممکن است بخواهیم انتخاب زبان کاربر، حالت نمایش سایت، اطلاعات یک فرم موقت یا برخی تنظیمات رابط کاربری را ذخیره کنیم تا هنگام مراجعه دوباره به صفحه بتوانیم آنها را بازیابی کنیم. Web Storage یکی از سادهترین APIهای مرورگر برای انجام این کار است و دو مکانیزم اصلی به نامهای localStorage و sessionStorage دارد. این دو API دادهها را به صورت جفتهای کلید و مقدار در سمت کاربر نگهداری میکنند و برخلاف کوکیها برای ذخیره دادههای ساده سمت کلاینت بسیار راحتتر هستند. در این مقاله ابتدا مفهوم Web Storage را یاد میگیریم، سپس با localStorage و sessionStorage کار میکنیم و در ادامه با متدهای اصلی، ذخیره دادههای پیچیدهتر، حذف اطلاعات، محدودیتهای ذخیرهسازی و نکات امنیتی آشنا میشویم.
Web Storage چیست؟
Web Storage یک API مرورگر است که به JavaScript اجازه میدهد اطلاعات ساده را در فضای ذخیرهسازی مربوط به وبسایت نگهداری کند.
دو روش اصلی Web Storage عبارتاند از:
localStorage
sessionStorageهر دو از ساختاری مبتنی بر:
Key → Valueاستفاده میکنند.
برای مثال:
name → Behnam
theme → dark
language → faدر JavaScript میتوانیم این اطلاعات را ذخیره کنیم و بعداً دوباره بخوانیم.
چرا به Web Storage نیاز داریم؟
فرض کنید یک سایت فروشگاهی داریم.
کاربر حالت نمایش سایت را روی:
حالت تاریکقرار میدهد.
اگر این انتخاب فقط در متغیر JavaScript نگهداری شود، با Refresh کردن صفحه از بین میرود.
اما اگر آن را در localStorage ذخیره کنیم، میتوانیم هنگام ورود دوباره کاربر به سایت آن را بازیابی کنیم.
مثلاً:
کاربر
↓
انتخاب حالت تاریک
↓
ذخیره در localStorage
↓
Refresh
↓
خواندن localStorage
↓
فعال شدن حالت تاریکاین یکی از کاربردهای بسیار رایج Web Storage است.
دو نوع Web Storage
Web Storage دو مکانیزم اصلی دارد:
localStorage
sessionStorageاگرچه هر دو تقریباً با متدهای یکسانی کار میکنند، تفاوت مهمی در مدت نگهداری اطلاعات دارند.
localStorage چیست؟
localStorage برای نگهداری اطلاعاتی استفاده میشود که میخواهیم بعد از بسته شدن صفحه یا حتی بسته و باز شدن مرورگر نیز باقی بمانند.
مثلاً:
localStorage.setItem(
"username",
"Behnam"
);حالا مقدار:
Behnamدر localStorage ذخیره شده است.
اگر صفحه را Refresh کنیم، اطلاعات همچنان وجود دارد.
در حالت معمول، دادههای localStorage تا زمانی که حذف نشوند باقی میمانند؛ البته مرورگر و تنظیمات کاربر میتوانند روی دسترسی و نگهداری دادهها اثر بگذارند.
sessionStorage چیست؟
sessionStorage نیز برای ذخیره اطلاعات استفاده میشود، اما طول عمر آن با یک Page Session مرتبط است.
برای مثال:
sessionStorage.setItem(
"username",
"Behnam"
);اطلاعات در فضای session همان تب مرورگر ذخیره میشود.
با پایان یافتن Session صفحه، دادههای آن از بین میروند. همچنین sessionStorage بین تبهای مستقل مانند localStorage مشترک نیست.
تفاوت localStorage و sessionStorage
مهمترین تفاوت را میتوان اینگونه خلاصه کرد:
ویژگی | localStorage | sessionStorage |
|---|---|---|
ذخیره اطلاعات | بله | بله |
باقی ماندن بعد از Refresh | بله | بله |
باقی ماندن بعد از بسته شدن تب | معمولاً بله | خیر |
مناسب برای تنظیمات دائمی | بله | معمولاً خیر |
مناسب برای اطلاعات موقت یک تب | ممکن است | بله |
API | تقریباً یکسان | تقریباً یکسان |
localStorage بر اساس Origin ذخیره میشود، در حالی که sessionStorage علاوه بر Origin به تب یا browsing context نیز وابسته است.
Origin چیست؟
در بحث Web Storage اصطلاح مهمی به نام:
Originوجود دارد.
برای شروع کافی است بدانید که مرورگر اطلاعات Storage را برای هر وبسایت یا Origin به صورت جداگانه مدیریت میکند.
برای مثال:
https://example.comفضای Storage خودش را دارد.
و:
https://another-site.comفضای Storage جداگانهای دارد.
بنابراین یک سایت نمیتواند به صورت عادی localStorage سایت دیگری را بخواند.
این جداسازی یکی از اصول مهم امنیت مرورگر است.
اولین استفاده از localStorage
سادهترین روش ذخیره اطلاعات:
localStorage.setItem(
"name",
"Behnam"
);است.
ساختار متد:
localStorage.setItem(
"key",
"value"
);است.
مثلاً:
localStorage.setItem(
"theme",
"dark"
);در اینجا:
key = theme
value = darkاست.
دریافت اطلاعات با getItem
برای دریافت اطلاعات ذخیرهشده از:
getItem()
استفاده میکنیم.
مثال:
const theme =
localStorage.getItem("theme");
console.log(theme);
اگر مقدار ذخیرهشده:
dark
باشد، نتیجه:
dark
خواهد بود.
مثال ساده ذخیره و دریافت
localStorage.setItem(
"username",
"Behnam"
);
const username =
localStorage.getItem("username");
console.log(username);ابتدا:
username → Behnamذخیره میشود.
سپس با:
getItem()دوباره خوانده میشود.
اگر کلید وجود نداشته باشد چه میشود؟
فرض کنید چنین کلیدی وجود ندارد:
const result =
localStorage.getItem("email");در این حالت معمولاً نتیجه:
nullخواهد بود.
بنابراین میتوانیم بررسی کنیم:
const email =
localStorage.getItem("email");
if (email === null) {
console.log(
"ایمیل ذخیره نشده است."
);
}حذف یک مقدار با removeItem
اگر بخواهیم فقط یک مقدار را حذف کنیم، از:
removeItem()استفاده میکنیم.
مثلاً:
localStorage.removeItem(
"username"
);حالا کلید:
usernameحذف میشود.
حذف تمام اطلاعات با clear
اگر بخواهیم تمام دادههای Storage مربوط به آن Storage را حذف کنیم:
localStorage.clear();استفاده میکنیم.
مثلاً:
localStorage.setItem(
"name",
"Behnam"
);
localStorage.setItem(
"theme",
"dark"
);
localStorage.clear();بعد از اجرای clear() اطلاعات ذخیرهشده در آن فضای localStorage پاک میشوند.
بنابراین باید با احتیاط از آن استفاده کنیم.
بررسی تعداد آیتمها با length
میتوانیم تعداد آیتمهای ذخیرهشده را با:
localStorage.lengthدریافت کنیم.
مثلاً:
console.log(
localStorage.length
);اگر سه کلید ذخیره شده باشد، نتیجه:
3خواهد بود.
دریافت کلید با متد key
متد دیگری به نام:
key()وجود دارد.
مثلاً:
const firstKey =
localStorage.key(0);
console.log(firstKey);عدد:
0به اولین آیتم اشاره میکند.
البته در برنامههای معمولی بهتر است تا حد امکان با نام کلید مشخص و getItem() کار کنیم.
یک مثال کامل از متدهای اصلی
localStorage.setItem(
"name",
"Behnam"
);
localStorage.setItem(
"theme",
"dark"
);
console.log(
localStorage.getItem("name")
);
console.log(
localStorage.getItem("theme")
);
console.log(
localStorage.length
);
localStorage.removeItem(
"theme"
);متدهای اصلی که تا اینجا یاد گرفتیم:
setItem()
getItem()
removeItem()
clear()
key()
lengthlocalStorage فقط برای String است
یکی از نکات بسیار مهم Web Storage این است که دادهها به صورت رشتهای (String) ذخیره میشوند.
مثلاً:
localStorage.setItem(
"age",
25
);هنگام ذخیرهسازی مقدار به صورت رشته در Storage نگهداری میشود.
به همین دلیل هنگام دریافت اطلاعات باید به نوع داده توجه کنیم.
ذخیره عدد
مثلاً:
localStorage.setItem(
"age",
25
);سپس:
const age =
localStorage.getItem("age");
console.log(age);مقدار دریافتشده یک String است.
بنابراین اگر واقعاً به عدد نیاز داشته باشیم، میتوانیم آن را تبدیل کنیم:
const age =
Number(
localStorage.getItem("age")
);
console.log(age + 5);نتیجه:
30خواهد بود.
مشکل ذخیره مستقیم Object
فرض کنید یک Object داریم:
const user = {
name: "Behnam",
age: 30
};اگر مستقیماً آن را ذخیره کنیم:
localStorage.setItem(
"user",
user
);این روش برای ذخیره ساختار Object مناسب نیست.
زیرا Web Storage دادهها را به صورت String نگهداری میکند.
برای ذخیره Object بهتر است از:
JSON.stringify()
استفاده کنیم.
JSON.stringify چیست؟
JSON.stringify() یک مقدار JavaScript مانند Object یا Array را به رشته JSON تبدیل میکند.
مثلاً:
const user = {
name: "Behnam",
age: 30
};
const json =
JSON.stringify(user);
console.log(json);نتیجه چیزی شبیه این خواهد بود:
{
"name": "Behnam",
"age": 30
}البته خروجی واقعی JSON.stringify() یک String است.
ذخیره Object در localStorage
حالا میتوانیم Object را به شکل صحیح ذخیره کنیم:
const user = {
name: "Behnam",
age: 30
};
localStorage.setItem(
"user",
JSON.stringify(user)
);در این حالت Object ابتدا به JSON تبدیل میشود و سپس در Storage قرار میگیرد.
دریافت Object با JSON.parse
هنگام دریافت اطلاعات باید رشته JSON را دوباره به Object تبدیل کنیم.
برای این کار از:
JSON.parse()استفاده میکنیم.
مثال:
const user =
JSON.parse(
localStorage.getItem("user")
);
console.log(user.name);
console.log(user.age);بنابراین الگوی معمول این است:
Object
↓
JSON.stringify()
↓
localStorage
↓
getItem()
↓
JSON.parse()
↓
Objectذخیره Array
همین روش برای Array نیز کاربرد دارد.
مثلاً:
const products = [
"Laptop",
"Mouse",
"Keyboard"
];
localStorage.setItem(
"products",
JSON.stringify(products)
);برای دریافت:
const products =
JSON.parse(
localStorage.getItem("products")
);
console.log(products);ساخت یک Todo List ساده
حالا از Web Storage در یک مثال کاربردی استفاده کنیم.
فرض کنید میخواهیم لیستی از کارها را ذخیره کنیم:
const todos = [
"یادگیری HTML",
"یادگیری CSS",
"یادگیری JavaScript"
];میتوانیم آن را ذخیره کنیم:
localStorage.setItem(
"todos",
JSON.stringify(todos)
);بعداً:
const savedTodos =
JSON.parse(
localStorage.getItem("todos")
);
console.log(savedTodos);با این روش حتی بعد از Refresh صفحه نیز میتوانیم اطلاعات را دوباره دریافت کنیم.
بررسی وجود اطلاعات قبل از JSON.parse
فرض کنید هنوز چیزی ذخیره نشده است.
اگر این کد را اجرا کنیم:
const user =
JSON.parse(
localStorage.getItem("user")
);ممکن است مقدار دریافتشده null باشد.
بهتر است ابتدا بررسی کنیم:
const savedUser =
localStorage.getItem("user");
if (savedUser !== null) {
const user =
JSON.parse(savedUser);
console.log(user);
}این روش برای جلوگیری از خطا و مدیریت بهتر وضعیت برنامه مناسبتر است.
ساخت یک مثال تنظیمات کاربر
فرض کنید کاربر میتواند حالت نمایش سایت را انتخاب کند:
روشن
تاریکHTML:
<button id="light">
حالت روشن
</button>
<button id="dark">
حالت تاریک
</button>JavaScript:
document
.getElementById("light")
.addEventListener("click", function() {
localStorage.setItem(
"theme",
"light"
);
});
document
.getElementById("dark")
.addEventListener("click", function() {
localStorage.setItem(
"theme",
"dark"
);
});حالا انتخاب کاربر در localStorage ذخیره میشود.
خواندن تنظیمات هنگام باز شدن صفحه
میتوانیم هنگام اجرای صفحه مقدار ذخیرهشده را بخوانیم:
const theme =
localStorage.getItem("theme");
console.log(theme);اگر مقدار:
darkباشد، میتوانیم کلاس مربوط به حالت تاریک را فعال کنیم.
مثلاً:
if (theme === "dark") {
document.body.classList.add(
"dark"
);
}در مقالات آینده که CSS را یاد میگیریم، میتوانیم این مثال را بسیار حرفهایتر کنیم.
sessionStorage در عمل
استفاده از sessionStorage تقریباً مشابه localStorage است.
مثلاً:
sessionStorage.setItem(
"step",
"2"
);برای دریافت:
const step =
sessionStorage.getItem("step");
console.log(step);برای حذف:
sessionStorage.removeItem(
"step"
);و برای حذف همه اطلاعات:
sessionStorage.clear();یک مثال کاربردی برای sessionStorage
فرض کنید یک فرم ثبتنام چند مرحلهای داریم:
مرحله 1
↓
مرحله 2
↓
مرحله 3میتوانیم شماره مرحله فعلی را در:
sessionStorageذخیره کنیم.
مثلاً:
sessionStorage.setItem(
"currentStep",
"2"
);اگر کاربر صفحه را Refresh کند، میتوانیم مرحله را دوباره بخوانیم:
const currentStep =
sessionStorage.getItem(
"currentStep"
);
console.log(currentStep);این یکی از نمونههای مناسب استفاده از sessionStorage است.
localStorage یا sessionStorage؟
برای انتخاب درست از این سؤال استفاده کنید:
آیا میخواهم اطلاعات بعد از پایان Session نیز باقی بماند؟
اگر جواب:
بلهباشد، localStorage میتواند گزینه مناسبی باشد.
اگر جواب:
خیرباشد و اطلاعات فقط برای Session فعلی لازم باشد، sessionStorage میتواند مناسبتر باشد.
مثلاً:
نیاز | انتخاب مناسب |
|---|---|
انتخاب تم سایت | localStorage |
زبان انتخابشده | localStorage |
تنظیمات رابط کاربری | localStorage |
مرحله فعلی فرم چندمرحلهای | sessionStorage |
اطلاعات موقت یک تب | sessionStorage |
دادهای که باید در مراجعه بعدی باقی بماند | localStorage |
البته انتخاب نهایی به نیاز پروژه بستگی دارد.
Web Storage و Cookies چه تفاوتی دارند؟
ممکن است بپرسید:
اگر Cookie هم اطلاعات ذخیره میکند، چرا Web Storage داریم؟
تفاوتهای مهمی وجود دارد.
Web Storage برای ذخیرهسازی ساده سمت مرورگر طراحی شده است و API آن بسیار ساده است.
در مقابل، Cookie بخشی از سازوکار HTTP است و در شرایط معمول همراه درخواستهای HTTP ارسال میشود.
به همین دلیل نباید هر دادهای را صرفاً به دلیل امکان ذخیره در Cookie قرار دهیم. MDN نیز برای دادههایی که صرفاً باید در مرورگر نگهداری شوند، Web Storage و فناوریهای دیگر سمت کلاینت را از ارسال غیرضروری داده در Cookie متمایز میکند.
آیا Web Storage جای Database است؟
خیر.
Web Storage برای ذخیره دادههای ساده سمت مرورگر مناسب است.
اما برای یک برنامه واقعی مانند:
فروشگاه اینترنتی
سامانه کاربران
سیستم مالی
سامانه مدیریتمعمولاً اطلاعات اصلی باید در سمت سرور و Database نگهداری شوند.
برای مثال:
Database
├── Users
├── Products
├── Orders
└── Paymentsو Web Storage میتواند برای برخی تنظیمات یا دادههای ساده سمت کلاینت استفاده شود.
آیا میتوان اطلاعات حساس را در localStorage ذخیره کرد؟
باید بسیار محتاط باشیم.
localStorage محل مناسبی برای نگهداری اطلاعات بسیار حساس مانند:
رمز عبور
اطلاعات محرمانه
کلیدهای امنیتی حساسنیست.
هر JavaScriptی که در همان Origin اجرا شود و به Storage دسترسی داشته باشد، میتواند دادههای ذخیرهشده را بخواند.
بنابراین نباید تصور کنیم:
localStorage = فضای امن برای Secretsاین تصور اشتباه است.
در طراحی سیستمهای احراز هویت، نوع داده، تهدیدهای XSS، نحوه مدیریت Session و مکانیزمهای امنیتی باید جداگانه بررسی شوند.
محدودیت حجم Web Storage
Web Storage برای ذخیره حجم بسیار زیادی از اطلاعات طراحی نشده است.
مقدار دقیق فضای قابل استفاده میتواند به مرورگر و شرایط آن بستگی داشته باشد.
MDN در مستندات فعلی Web Storage حداکثر حدود 10 MiB را به صورت مجموع معمول برای Web Storage ذکر میکند که شامل حدود 5 MiB برای localStorage و 5 MiB برای sessionStorage به ازای هر Origin است. این مقدار را نباید به عنوان یک عدد مطلق برای تمام شرایط و همه مرورگرها در نظر گرفت.
بنابراین:
Web Storage
↓
دادههای ساده و کمحجمو نه:
Web Storage
↓
Database بزرگQuotaExceededError
اگر فضای قابل استفاده Storage پر شود، عملیات ذخیرهسازی میتواند با خطایی مانند:
QuotaExceededErrorمواجه شود.
بنابراین در برنامههای مهم بهتر است عملیات ذخیرهسازی را با مدیریت خطا انجام دهیم.
مثلاً:
try {
localStorage.setItem(
"name",
"Behnam"
);
} catch (error) {
console.log(
"ذخیره اطلاعات با مشکل مواجه شد."
);
}این موضوع مخصوصاً زمانی اهمیت دارد که Storage ممکن است توسط تنظیمات مرورگر محدود شده باشد یا فضای آن پر شده باشد.
Web Storage همزمان اجرا میشود
یکی دیگر از نکات فنی این API این است که عملیات localStorage و sessionStorage به صورت synchronous انجام میشوند.
یعنی اجرای عملیات خواندن یا نوشتن میتواند اجرای JavaScript را تا پایان آن عملیات متوقف کند.
برای دادههای کوچک این موضوع معمولاً مشکل بزرگی ایجاد نمیکند، اما استفاده بسیار سنگین و مکرر از Web Storage برای دادههای بزرگ میتواند انتخاب مناسبی نباشد.
رویداد storage
Web Storage یک Event به نام:
storageدارد.
این Event زمانی میتواند برای اطلاع از تغییرات Storage در Contextهای دیگر همان Origin مورد استفاده قرار گیرد.
مثلاً:
window.addEventListener(
"storage",
function(event) {
console.log(event);
}
);اطلاعاتی مانند:
event.key
event.oldValue
event.newValueمیتوانند اطلاعات مربوط به تغییر را در اختیار ما قرار دهند.
یک مثال ساده Storage Event
فرض کنید در یک تب مقدار زیر را تغییر میدهیم:
localStorage.setItem(
"theme",
"dark"
);در یک Context دیگر از همان Origin میتوانیم تغییر Storage را بررسی کنیم:
window.addEventListener(
"storage",
function(event) {
console.log(
"Key:",
event.key
);
console.log(
"Old:",
event.oldValue
);
console.log(
"New:",
event.newValue
);
}
);این قابلیت میتواند برای هماهنگ کردن برخی وضعیتها بین تبهای مختلف کاربرد داشته باشد.
یک مثال کوچک چندتبای
فرض کنید سایت در دو تب باز است:
Tab 1
Tab 2در Tab 1:
localStorage.setItem(
"theme",
"dark"
);در Tab 2 میتوانیم تغییر Storage را با Event دریافت کنیم:
window.addEventListener(
"storage",
function(event) {
if (event.key === "theme") {
console.log(
"Theme changed to:",
event.newValue
);
}
}
);این قابلیت در برنامههایی که چند تب همزمان دارند میتواند مفید باشد.
یک پروژه کوچک Web Storage
حالا یک پروژه کوچک بسازیم که نام کاربر را ذخیره کند.
HTML
<!DOCTYPE html>
<html lang="fa" dir="rtl">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, initial-scale=1.0">
<title>Web Storage</title>
</head>
<body>
<h1>
ذخیره نام کاربر
</h1>
<input
id="nameInput"
type="text"
placeholder="نام خود را وارد کنید">
<button id="saveButton">
ذخیره
</button>
<button id="removeButton">
حذف
</button>
<p id="result"></p>
<script>
const nameInput =
document.getElementById(
"nameInput"
);
const result =
document.getElementById(
"result"
);
document
.getElementById("saveButton")
.addEventListener(
"click",
function() {
const name =
nameInput.value;
localStorage.setItem(
"username",
name
);
result.textContent =
"نام شما ذخیره شد.";
}
);
document
.getElementById("removeButton")
.addEventListener(
"click",
function() {
localStorage.removeItem(
"username"
);
result.textContent =
"نام حذف شد.";
}
);
const savedName =
localStorage.getItem(
"username"
);
if (savedName) {
nameInput.value =
savedName;
result.textContent =
`نام ذخیرهشده: ${savedName}`;
}
</script>
</body>
</html>در این پروژه:
Input
↓
localStorage.setItem()
↓
Storage
↓
getItem()
↓
نمایش اطلاعاترا پیادهسازی کردیم.
یک پروژه کوچک با Object
حالا یک User Object ذخیره کنیم.
const user = {
firstName: "Behnam",
lastName: "Nowbakht",
theme: "dark"
};
localStorage.setItem(
"user",
JSON.stringify(user)
);برای دریافت:
const savedUser =
localStorage.getItem("user");
if (savedUser) {
const user =
JSON.parse(savedUser);
console.log(
user.firstName
);
console.log(
user.theme
);
}این الگو در پروژههای واقعی بسیار رایج است.
اشتباهات رایج در Web Storage
اشتباه اول: تصور اینکه همه چیز Number است
وقتی دادهای را از Storage میخوانیم، باید توجه کنیم که مقدار ذخیرهشده در قالب String قرار دارد.
بنابراین:
const age =
localStorage.getItem("age");را نباید بدون توجه به نوع داده، یک Number واقعی فرض کنیم.
اشتباه دوم: ذخیره مستقیم Object
این کار:
localStorage.setItem(
"user",
user
);برای ذخیره ساختار Object مناسب نیست.
بهتر است:
JSON.stringify(user)استفاده کنیم.
اشتباه سوم: JSON.parse بدون بررسی null
این کد:
JSON.parse(
localStorage.getItem("user")
);در صورتی که داده وجود نداشته باشد میتواند باعث منطق نامناسب یا خطاهای بعدی در برنامه شود.
بهتر است ابتدا وجود مقدار را بررسی کنیم.
اشتباه چهارم: استفاده از localStorage برای دادههای بسیار بزرگ
Web Storage برای دادههای کوچک و ساده طراحی شده است.
برای دادههای بزرگتر یا ساختارهای پیچیدهتر، فناوریهایی مانند:
IndexedDBگزینههای مناسبتری هستند.
اشتباه پنجم: ذخیره اطلاعات حساس
نباید اطلاعات حساس را بدون بررسی دقیق معماری امنیتی در localStorage قرار دهیم.
اشتباه ششم: استفاده بیدلیل از clear()
این کد:
localStorage.clear();تمام دادههای localStorage مربوط به Origin را پاک میکند.
پس اگر فقط میخواهیم یک مقدار حذف شود، بهتر است از:
removeItem()استفاده کنیم.
تمرین عملی اول
یک صفحه ایجاد کنید که یک Input و دو دکمه داشته باشد:
نام:
[____________]
[ذخیره]
[نمایش]با کلیک روی ذخیره:
localStorage.setItem()استفاده کنید.
با کلیک روی نمایش:
localStorage.getItem()را اجرا کنید.
تمرین عملی دوم
یک سیستم ساده برای انتخاب رنگ بسازید.
مثلاً کاربر بتواند بین:
قرمز
سبز
آبیانتخاب کند.
انتخاب او را در:
localStorageذخیره کنید.
بعد از Refresh صفحه، رنگ قبلی را بازیابی کنید.
تمرین عملی سوم
یک Object مانند زیر ایجاد کنید:
const user = {
name: "Ali",
age: 25,
city: "Tehran"
};آن را با:
JSON.stringify()در localStorage ذخیره کنید.
سپس آن را با:
JSON.parse()
دوباره به Object تبدیل کنید.
تمرین عملی چهارم
یک فرم چندمرحلهای فرضی ایجاد کنید.
شماره مرحله فعلی را با:
sessionStorageذخیره کنید.
مثلاً:
مرحله 1
مرحله 2
مرحله 3با Refresh صفحه بررسی کنید که مرحله فعلی همچنان قابل بازیابی باشد.
چالش
یک صفحه با عنوان:
تنظیمات کاربربسازید.
صفحه باید شامل موارد زیر باشد:
نام کاربر
انتخاب تم روشن یا تاریک
انتخاب زبان
دکمه ذخیره
دکمه حذف تنظیمات
اطلاعات را به صورت یک Object ذخیره کنید:
const settings = {
username: "...",
theme: "...",
language: "..."
};سپس:
JSON.stringify()برای ذخیره و:
JSON.parse()برای بازیابی استفاده کنید.
بعد از Refresh صفحه، تنظیمات قبلی باید دوباره نمایش داده شوند.
نکات مهم این مقاله
در این مقاله یاد گرفتیم:
Web Storage برای ذخیره دادههای ساده در مرورگر استفاده میشود.
دو نوع اصلی Web Storage عبارتاند از
localStorageوsessionStorage.localStorageمعمولاً داده را بعد از بسته شدن مرورگر نیز نگه میدارد.sessionStorageبه Session یک تب وابسته است.setItem()برای ذخیره اطلاعات است.getItem()برای دریافت اطلاعات است.removeItem()یک آیتم را حذف میکند.clear()تمام آیتمهای آن Storage را حذف میکند.lengthتعداد آیتمها را مشخص میکند.key()برای دریافت کلید یک آیتم استفاده میشود.Web Storage دادهها را به صورت String نگهداری میکند.
برای ذخیره Object و Array میتوان از
JSON.stringify()استفاده کرد.برای تبدیل دوباره JSON به Object یا Array میتوان از
JSON.parse()استفاده کرد.storageEvent میتواند برای اطلاع از تغییرات Storage در Contextهای دیگر همان Origin استفاده شود.Web Storage برای دادههای ساده و نسبتاً کمحجم مناسب است.
نباید اطلاعات حساس را بدون بررسی امنیتی در
localStorageقرار داد.Web Storage جایگزین Database نیست.
برای دادههای بزرگتر و ساختارهای پیچیدهتر، فناوریهایی مانند IndexedDB میتوانند مناسبتر باشند.
جمعبندی
Web Storage یکی از سادهترین قابلیتهای مرورگر برای نگهداری اطلاعات سمت کاربر است و در بسیاری از پروژههای وب میتواند برای ذخیره تنظیمات و دادههای ساده بسیار کاربردی باشد. دو ابزار اصلی آن یعنی localStorage و sessionStorage از متدهای مشابهی مانند setItem()، getItem()، removeItem() و clear() استفاده میکنند، اما تفاوت اصلی آنها در طول عمر و محدوده Session اطلاعات است.
همچنین یاد گرفتیم که Web Storage دادهها را به صورت String نگهداری میکند و برای ذخیره Object یا Array معمولاً باید از JSON.stringify() و هنگام بازیابی از JSON.parse() استفاده کنیم. در کنار این موارد، با storage Event، محدودیت حجم، مدیریت خطا و نکات امنیتی نیز آشنا شدیم.
نظرات
هنوز نظری ثبت نشده است.