مقدمه
در دنیای توسعه وب، مدیریت دادههای سمت کاربر (Client-Side Data) همواره یکی از چالشهای اصلی بوده است. کوکیها (Cookies) بهعنوان یکی از قدیمیترین ابزارهای ذخیرهسازی اطلاعات در مرورگرها، نقش مهمی در حفظ حالت کاربر، احراز هویت و شخصیسازی تجربه کاربری ایفا کردهاند. با این حال، روشهای سنتی مدیریت کوکیها، مانند استفاده از document.cookie، با محدودیتهایی نظیر عملکرد ناهمزمان ضعیف، پیچیدگی در دسترسی و عدم انعطافپذیری مواجه هستند. این محدودیتها بهویژه در برنامههای کاربردی مدرن که به عملکرد بالا و تعامل پویا نیاز دارند، بیشتر نمایان میشوند.
برای توسعهدهندگان داتنت (Microsoft .NET Framework) که اغلب با برنامههای وب پیچیده سروکار دارند، آشنایی با ابزارهای مدرن مدیریت کوکیها امری ضروری است. در این راستا، رابط برنامهنویسی Cookie Store API بهعنوان یک راهحل نوین معرفی شده است که با ارائه قابلیتهای ناهمزمان (Asynchronous) و دسترسی سادهتر، تجربه بهتری را برای توسعهدهندگان و کاربران فراهم میکند. این مقاله به بررسی این API، مزایا و کاربردهای آن در توسعه وب پرداخته و با ارائه مثالهای عملی، شما را با نحوه استفاده از آن در پروژههای داتنت آشنا میکند.
کوکیها و چالشهای سنتی
کوکیها در اصل قطعاتی از داده هستند که توسط سرور به مرورگر ارسال شده و در آنجا ذخیره میشوند تا در درخواستهای بعدی به سرور بازگردانده شوند. این مکانیزم برای ذخیره اطلاعات موقتی مانند توکنهای احراز هویت یا تنظیمات کاربر بسیار مفید است. با این حال، روش سنتی دسترسی به کوکیها از طریق document.cookie مشکلاتی دارد. این ویژگی یک رشته متنی ساده را برمیگرداند که شامل تمام کوکیهای دامنه فعلی است و برای دسترسی به یک کوکی خاص، باید این رشته را بهصورت دستی تجزیه (Parse) کنید. بهعنوان مثال:
document.cookie = "username=JohnDoe; expires=Thu, 18 Dec 2025 12:00:00 UTC; path=/";
console.log(document.cookie); // خروجی: "username=JohnDoe"
این روش نهتنها دستوپاگیر است، بلکه به دلیل ماهیت همزمان (Synchronous) خود، میتواند عملکرد برنامه را در هنگام دسترسی به کوکیها تحت تأثیر قرار دهد. علاوه بر این، کوکیها در هر درخواست HTTP به سرور ارسال میشوند که میتواند پهنای باند را هدر داده و تأخیر را افزایش دهد، بهویژه در برنامههای وب پیچیده که در اکوسیستم داتنت توسعه مییابند.
معرفی Cookie Store API
Cookie Store API یک رابط برنامهنویسی مدرن است که برای غلبه بر محدودیتهای document.cookie طراحی شده است. این API با ارائه دسترسی ناهمزمان به کوکیها، امکان مدیریت کارآمدتر و انعطافپذیرتر آنها را فراهم میکند. برخلاف روش سنتی، این API به شما اجازه میدهد کوکیها را بهصورت جداگانه بخوانید، بنویسید یا حذف کنید، بدون نیاز به تجزیه دستی رشتهها. همچنین، این API از Service Workers پشتیبانی میکند که برای برنامههای وب پیشرفته (Progressive Web Apps) که در داتنت نیز محبوبیت دارند، بسیار مفید است.
برای استفاده از Cookie Store API، ابتدا باید مطمئن شوید که مرورگر شما از آن پشتیبانی میکند. این API در حال حاضر در مرورگرهای مدرن مانند کروم (Chrome) و اج (Edge) در دسترس است، اما ممکن است در برخی مرورگرهای قدیمیتر هنوز پشتیبانی نشود. برای بررسی پشتیبانی، میتوانید از کد زیر استفاده کنید:
if ('cookieStore' in window) {
console.log("Cookie Store API پشتیبانی میشود!");
} else {
console.log("مرورگر شما از Cookie Store API پشتیبانی نمیکند.");
}
قابلیتهای کلیدی Cookie Store API
- دسترسی ناهمزمان: این API از وعدهها (Promises) استفاده میکند که به شما امکان میدهد عملیات را بدون مسدود کردن رشته اصلی (Main Thread) انجام دهید. این ویژگی برای برنامههای داتنت که اغلب با رابطهای کاربری سنگین کار میکنند، بسیار ارزشمند است.
- مدیریت سادهتر کوکیها: بهجای کار با یک رشته متنی، میتوانید مستقیماً به کوکیها دسترسی پیدا کنید یا آنها را تغییر دهید.
- پشتیبانی از رویدادها: این API امکان مشاهده تغییرات کوکیها را از طریق رویدادها فراهم میکند، که برای برنامههای پویا بسیار کاربردی است.
- سازگاری با Service Workers: این قابلیت به توسعهدهندگان اجازه میدهد کوکیها را در محیطهای بدون DOM مدیریت کنند، که برای برنامههای وب پیشرفته حیاتی است.
مثالهای عملی
بیایید با چند مثال عملی، نحوه استفاده از Cookie Store API را بررسی کنیم. فرض کنید در یک برنامه ASP.NET Core میخواهید اطلاعات کاربر را در کوکی ذخیره کنید.
تنظیم یک کوکی
برای تنظیم یک کوکی با استفاده از این API، میتوانید از متد set استفاده کنید:
async function setCookie() {
await cookieStore.set({
name: "userId",
value: "12345",
expires: Date.now() + 24 * 60 * 60 * 1000, // انقضا پس از 24 ساعت
path: "/"
});
console.log("کوکی با موفقیت تنظیم شد!");
}
setCookie();در این مثال، یک کوکی با نام userId و مقدار 12345 تنظیم شده که پس از 24 ساعت منقضی میشود. استفاده از async/await تضمین میکند که عملیات بهصورت ناهمزمان انجام شود.
خواندن یک کوکی
برای خواندن یک کوکی خاص، از متد get استفاده میکنیم:
async function getCookie() {
const cookie = await cookieStore.get("userId");
if (cookie) {
console.log(`کوکی یافت شد: ${cookie.value}`);
} else {
console.log("کوکی یافت نشد.");
}
}
getCookie();این کد مقدار کوکی userId را بازیابی کرده و در کنسول نمایش میدهد.
حذف یک کوکی
برای حذف یک کوکی، از متد delete استفاده میکنیم:
async function deleteCookie() {
await cookieStore.delete("userId");
console.log("کوکی با موفقیت حذف شد!");
}
deleteCookie();
مشاهده تغییرات کوکیها
یکی از قابلیتهای جذاب این API، امکان گوش دادن به تغییرات کوکیها از طریق رویداد change است:
cookieStore.addEventListener('change', (event) => {
console.log("تغییرات کوکیها:");
event.changed.forEach(cookie => {
console.log(`${cookie.name} به ${cookie.value} تغییر کرد`);
});
event.deleted.forEach(cookie => {
console.log(`${cookie.name} حذف شد`);
});
});این کد هر زمان که کوکیها تغییر کنند یا حذف شوند، اطلاعاتی را در کنسول نمایش میدهد.
ادغام با پروژههای داتنت
در پروژههای ASP.NET Core، میتوانید از Cookie Store API در سمت کاربر (Client-Side) استفاده کنید تا تجربه کاربری بهتری ارائه دهید. بهعنوان مثال، فرض کنید یک برنامه وب دارید که از احراز هویت مبتنی بر کوکی استفاده میکند. میتوانید از این API برای مدیریت توکنهای احراز هویت در مرورگر استفاده کنید، بدون اینکه به سرور فشار اضافی وارد شود. برای این منظور، میتوانید اسکریپتهای جاوااسکریپت را در فایلهای Razor یا Blazor خود ادغام کنید.
بهعنوان یک نمونه ساده، فرض کنید در یک صفحه Razor میخواهید وضعیت ورود کاربر را بررسی کنید:
<script>
async function checkLoginStatus() {
const token = await cookieStore.get("authToken");
if (token) {
document.getElementById("loginStatus").innerText = "کاربر وارد شده است";
} else {
document.getElementById("loginStatus").innerText = "کاربر وارد نشده است";
}
}
window.onload = checkLoginStatus;
</script>
<div id="loginStatus"></div>این کد بررسی میکند که آیا کوکی authToken وجود دارد یا خیر و بر اساس آن، پیامی را نمایش میدهد.
مزایا و محدودیتها
مزایای استفاده از Cookie Store API شامل بهبود عملکرد به دلیل ناهمزمان بودن، کاهش پیچیدگی کدها و افزایش انعطافپذیری است. با این حال، باید به محدودیتهایی مانند پشتیبانی ناقص در برخی مرورگرها و نیاز به دانش جاوااسکریپت برای استفاده از آن توجه داشت. توسعهدهندگان داتنت باید اطمینان حاصل کنند که برنامههایشان در مرورگرهای هدف بهدرستی کار میکند.
نتیجهگیری
Cookie Store API یک ابزار قدرتمند و مدرن برای مدیریت کوکیها در توسعه وب است که میتواند جایگزین مناسبی برای روشهای سنتی باشد. این API با ارائه قابلیتهای ناهمزمان، دسترسی سادهتر و پشتیبانی از رویدادها، به توسعهدهندگان داتنت کمک میکند تا برنامههای وب کارآمدتر و کاربرپسندتری بسازند. با ادغام این API در پروژههای ASP.NET Core یا Blazor، میتوانید تجربه کاربری را بهبود بخشیده و در عین حال از پیچیدگیهای غیرضروری کاسته شود.