مدیریت هویت کاربر در مرورگر بدون لاگین
خلاصهٔ کاملتر
خیلی از سایتها نیاز دارن حتی بدون اینکه کاربر لاگین کرده باشه، یه شناسه منحصربهفرد براش داشته باشن؛ مثلاً برای آنالیتیکس، شخصیسازی محتوا یا ردیابی رفتار. این مقاله یه راهحل جاوااسکریپتی معرفی میکنه که با تولید یه userPseudoId این مشکل رو حل میکنه.
شناسه با استفاده از crypto.randomUUID() تولید میشه که یه UUID استاندارد و امن میسازه. اگه مرورگر این API رو نداشت، یه روش fallback با Math.random() جایگزینش میشه:
if (typeof crypto !== 'undefined' && crypto.randomUUID) {
uuid = crypto.randomUUID();
} else {
uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
var r = Math.random() * 16 | 0;
var v = c == 'x' ? r : (r & 0x3 | 0x8);
return v.toString(16);
});
}
var userPseudoId = 'tns-' + uuid;بعد از تولید شناسه، سیستم سعی میکنه اون رو به بهترین شکل ممکن ذخیره کنه. اولویت اول localStorage هست، چون دادهها رو بهصورت دائمی نگه میداره. اگه localStorage در دسترس نبود یا با خطا مواجه شد، sessionStorage امتحان میشه. در آخر هم اگه هیچکدام کار نکردن، از کوکی استفاده میشه.
برای هر شناسه یه تاریخ انقضا هم ذخیره میشه (پیشفرض ۳۶۵ روز). موقع خوندن شناسه، سیستم چک میکنه که آیا هنوز معتبره یا نه:
if (currentTime > expiryTime) {
this._cleanupExpiredId();
storedId = null;
}اگه شناسه منقضی شده بود، پاکسازی میشه و یه شناسه جدید تولید و ذخیره میشه. این چرخه کاملاً خودکاره و کاربر هیچوقت باهاش مواجه نمیشه.
یه بخش جالب دیگه این سیستم، یه لایه caching در حافظه هست. وقتی شناسه یهبار خونده شد، داخل متغیر _userPseudoId نگه داشته میشه تا درخواستهای بعدی نیازی به خوندن دوباره از storage نداشته باشن و سرعت بالاتری داشته باشیم.
همین سیستم برای مدیریت خبرنامه هم استفاده میشه؛ وقتی کاربر ثبتنام میکنه، رویدادی به dataLayer پوش میشه و اگه کاربر قبلاً unsubscribe کرده بود، یه مودال نشون داده میشه که ازش میخواد دوباره فرم رو پر کنه.
در کل این معماری یه الگوی خوب برای ردیابی غیرمتمرکز کاربر هست که dependency به هیچ سرویس خارجی نداره، با محیطهای مختلف مرورگر سازگاره و دادهها رو بهصورت ایمن نگه میداره.
نکات کلیدی:
- شناسه با
crypto.randomUUID()ساخته میشه و fallback برای مرورگرهای قدیمی داره - ذخیرهسازی با اولویت: localStorage ← sessionStorage ← Cookie
- هر شناسه تاریخ انقضا داره و بعد از اتمام، خودکار تجدید میشه
- یه لایه cache در حافظه، سرعت دسترسی مکرر رو بالا میبره
- این سیستم برای آنالیتیکس و ردیابی رفتار کاربران ناشناس مناسبه




