زمان مطالعه: حدود ۶ دقیقه
خلاصه مقاله
کاربر وارد ربات یا فرم چندمرحلهای میشود، اطلاعات را وارد میکند و به مرحله پایانی میرسد. اما یک مکث چند ثانیهای، یک ریاستارت ساده، یا جابهجایی بین سرویسها کافی است تا همهچیز از اول شروع شود. هیچ خطایی دیده نمیشود، اما تجربه کاربر از بین رفته است. در این مقاله بررسی میکنیم که چرا sessionها در اپ یا ربات شما بهصورت ناگهانی پاک میشوند و چطور میتوانید از این اتفاق پرهزینه جلوگیری کنید.
تجربهای که با یک مکث از بین میرود...
کاربر وارد ربات خرید بلیت میشود، مبدا و مقصد را انتخاب میکند، زمان پرواز را وارد میکند... اما در مرحله پرداخت، ربات ناگهان از اول شروع میکند. انگار همهچیز فراموش شده است. فقط چند ثانیه مکث کرده بود.
در یک اپ وب، کاربر فرم چندمرحلهای را پر میکند، دکمه «ارسال» را میزند، اما با صفحهای خالی یا logout مواجه میشود. هیچ اروری دیده نمیشود. توسعهدهنده هم چیزی در لاگ نمیبیند.
این همان خطای ساکت و خطرناک session است: چیزی که نه با crash همراه است، نه با alert. تنها نشانهاش رفتار غیرقابلپیشبینی اپ است. و تنها قربانی اون اعتماد کاربره.
تفکر اشتباه: «session فقط برای login مهمه» خیلی از توسعهدهندهها تصور میکنن session فقط برای احراز هویته. ولی در تعاملات چندمرحلهای مثل فرم رزرو، خرید بلیت، یا ثبتنام در رویداد، session نقش حافظهی فعال اپ رو داره. اگر این حافظه از بین بره، تعامل انسانی هم از بین میره.
۵ علت اصلی حذف شدن sessionها در رباتها و اپهای چندمرحلهای
نگهداری session روی حافظه local
وقتی اپلیکیشن در چند instance اجرا میشود، ذخیره session روی حافظه local باعث میشود درخواست بعدی کاربر به سرویسی برسد که session او را نمیشناسد.
راهحل: استفاده از session store مرکزی مانند Redis.
انقضای سریع session
اگر زمان اعتبار session خیلی کوتاه تنظیم شده باشد، کاربران در حین تعامل عادی با اپ یا ربات session خود را از دست میدهند.
راهحل: تنظیم TTL session متناسب با رفتار واقعی کاربران.
نبود هماهنگی بین سرویسها
در معماریهای microservice، اگر session بین سرویسها sync نباشد، کاربر logout میشود یا state خود را از دست میدهد.
راهحل: طراحی زیرساختی که session را یکپارچه مدیریت کند.
ریاستارت یا failover بدون پایداری session
اگر پس از ریاستارت سرویس یا در زمان انتقال بین سرورها session پاک شود، تجربه کاربر ناپایدار میشود.
راهحل: استفاده از session store ماندگار و قابل بازیابی.
رفتار ناقص fallback در اپ یا ربات
بعضی اپها اگر session پیدا نشود، بیصدا به حالت «شروع مجدد» برمیگردند.
راهحل: پیام شفاف درباره از بین رفتن session نمایش دهید.
سناریوهایی که نشان میدهند session ناپایدار است
• کاربر وسط احراز هویت دوباره باید رمز وارد کند
• ربات تلگرام پس از چند مرحله دوباره میپرسد: «شروع کنیم؟»
• فرم چندمرحلهای بعد از ارسال، پیام logout یا صفحه خالی نمایش میدهد
• برخی stateها در UI دیده میشوند ولی backend چیزی نگه نداشته
تست ساده: آیا session اپ شما قابل اعتماده؟
برای تست این موضوع:
- وارد اپ یا ربات شوید و چند مرحله را طی کنید
- مرورگر را ببندید یا چند دقیقه مکث کنید
- دوباره بازگردید و ادامه دهید
اگر اپ شما هنوز یادش هست شما در کدام مرحله بودید، session پایدار است. اگر نه، وقت بازنگری است.
راهحل برنت برای جلوگیری از حذف session، در زیرساخت ابری برنت:
- sessionها ماندگار نگهداری میشوند
- هماهنگی بین سرویسها تضمین شده است
- failover بدون از دست رفتن session مدیریت میشود
- توسعهدهنده نیاز به بازنویسی پیچیده ندارد
session، حافظه تعاملات انسانی است
session فقط ابزار لاگین نیست. حافظه اپ شماست. اگر حافظهاش از بین برود، تعاملات انسانیاش هم از بین میرود. مثل مهمانی که دعوتتان کرده ولی وقتی رسیدید، فراموش کرده شما را دعوت کرده. نه به عمد، فقط چون یادش رفته. اما شما دیگر برنمیگردید.
اگر اپلیکیشنتان تعامل چندمرحلهای دارد، پایداری session را جدی بگیرید؛ چون آنچه از دست میرود فقط داده نیست، تجربه است.