خالی شدن سبد معمولاً یعنی درخواست بعدی همان session قبلی را نمیبیند، اما علت میتواند redirect بین دامنهها، cookie نامعتبر، cache پاسخ شخصی یا شکست ذخیره session باشد. اگر فقط badge سبد صفر است ولی صفحه Cart کالا را دارد، مسئله نمایش و fragment است؛ این دو سناریو را یکی ندانید.
پاسخ سریع: با مرورگر ناشناس یک کالا اضافه کنید و hostname، scheme، redirect و metadata کوکی را در تمام مراحل ثبت کنید. Cart را مستقیم باز و پاسخ cache را بررسی کنید. سپس log PHP/WooCommerce، فضای دیسک و backend session را ببینید. مقدار cookie را منتشر نکنید.
الگوی خالی شدن سرنخ اصلی است
- پس از صفحه بعد: domain/path کوکی یا cache
- پس از ورود: merge سبد یا افزونه عضویت
- در Checkout: redirect، HTTPS یا hook
- پس از چند دقیقه: expiration یا cleanup
- فقط موبایل: cache variation یا privacy مرورگر
- فقط برخی کاربران: consent، extension یا node خاص
Domain و HTTPS را یکدست کنید
حرکت میان دامنه با و بدون www یا HTTP و HTTPS ممکن است scope کوکی را تغییر دهد. redirect chain را از محصول تا Checkout ببینید. در reverse proxy تشخیص نادرست HTTPS میتواند cookie secure یا URL را خراب کند. WordPress Address را بدون backup و شناخت proxy تغییر ندهید.
Cookie را امن بررسی کنید
در DevTools نام، domain، path، expiry، Secure و SameSite را بررسی کنید. ابزار consent نباید کوکی ضروری سبد را اشتباهاً block یا حذف کند. رفتار پنجره ناشناس، مرورگر دوم و حالت login را مقایسه کنید.
Cache پاسخ شخصی
Cart، Checkout و My Account باید از page cache عمومی خارج باشند. وجود cookie ووکامرس نیز باید در bypass لحاظ شود. برای مرورگر، CDN، reverse proxy و افزونه، hit/miss را جدا بررسی کنید. purge همهچیز علت را نشان نمیدهد.
Session سمت سرور
خطای دیتابیس، cleanup نامناسب، جدول بزرگ یا write شکستخورده میتواند session را از دسترس خارج کند. log را با timestamp افزودن و بازکردن Cart تطبیق دهید. جدول را truncate یا sessionها را گروهی حذف نکنید؛ خرید کاربران فعال آسیب میبیند.
چند Node و Load Balancer
در چند node، session store و cache باید مشترک و سازگار باشند یا sticky session آگاهانه طراحی شود. تفاوت secret، clock یا deployment میان nodeها مشکل متناوب میسازد. node پاسخدهنده را در log داخلی ثبت کنید.
فضای دیسک و خطای Write
df -h
df -i
این فرمانها read-only هستند. پر بودن disk یا inode میتواند session و cache را مختل کند. فایل دیتابیس یا log فعال را کورکورانه حذف نکنید؛ مصرفکننده را پیدا و retention را اصلاح کنید.
ورود و Merge سبد
اگر فقط پس از login رخ میدهد، request و cookie قبل و بعد authentication را مقایسه کنید. افزونه wishlist، membership، SSO و redirect خارجی را بررسی کنید. callback روی hostname دیگر میتواند session تازهای بسازد.
Expiration، ساعت سرور و Cleanup
اگر سبد دقیقاً پس از فاصله مشخص خالی میشود، زمان انقضای session و اجرای cleanup را با ساعت سیستم و دیتابیس تطبیق دهید. اختلاف timezone نمایشی با clock واقعی را یکی ندانید. کاهش یا افزایش بسیار زیاد TTL راه تشخیص نیست؛ retention باید با تجربه خرید، حریم خصوصی و ظرفیت storage هماهنگ باشد.
بررسی Cache Key بدون افشای کاربر
در staging با دو مرورگر مستقل، یک محصول متفاوت به هر سبد اضافه کنید و پاسخها را مقایسه کنید. اگر محتوای یک نشست در دیگری ظاهر شد، cache عمومی را فوراً برای مسیر dynamic مهار کنید. برای گزارش، فقط hash یا شناسه آزمایشی ثبت کنید و cookie واقعی مشتری را نگه ندارید.
Deployment و نسخههای ناسازگار
اگر مشکل پس از update شروع شده، schema session، template override و سازگاری WooCommerce را بررسی کنید. rollback فایلها بدون توجه به migration دیتابیس میتواند ناسازگاری بسازد؛ نسخه قبلی را ابتدا روی clone داده آزمایش و مسیر حفظ سفارشهای جدید را مشخص کنید.
آزمون مرحلهای
- محصول ساده و مرورگر ناشناس انتخاب کنید.
- بعد از افزودن، Cart را مستقیم باز کنید.
- hostname و redirect را ثبت کنید.
- کوکی و cache header را مقایسه کنید.
- با login و مرورگر دوم تکرار کنید.
- log و storage همان زمان را ببینید.
- اصلاح را ابتدا روی staging منتشر کنید.
اگر فقط Mini-cart خالی است
ممکن است session سالم و fragment قالب stale باشد. صفحه Cart و endpoint fragment را مقایسه و Console را بررسی کنید. راهنمای افزودن محصول به تفکیک backend و UI کمک میکند.
اشتباههای رایج
- cache کردن Cart و Checkout
- حذف همه sessionها در ساعات فروش
- تغییر همزمان دامنه، HTTPS و cache
- ارسال cookie واقعی در ticket عمومی
- نادیده گرفتن consent و SSO
- حذف فایل بدون شناسایی برای آزادسازی disk
تأیید اصلاح
سبد باید در navigation، refresh، login مجاز و Checkout حفظ شود. همزمان مطمئن شوید سبد دو کاربر جابهجا نمیشود. expiration و logout نیز باید رفتار مورد انتظار داشته باشند.
چه زمانی کمک تخصصی لازم است؟
اگر مشکل متناوب، وابسته به node یا همراه نمایش سبد کاربر دیگر است، اولویت امنیت است. پشتیبانی ووکامرس میتواند cookie، session store، cache key و proxy را بدون حذف داده بررسی کند.
پرسشهای متداول
آیا Redis باعث خالی شدن سبد میشود؟
خود Redis الزاماً نه؛ namespace، eviction، TTL و invalidation را بررسی کنید.
چرا فقط بعد از ورود رخ میدهد؟
merge سبد، کوکی حساب، SSO و redirect دامنه را بررسی کنید.
آیا حذف sessionها راهحل است؟
خیر؛ خرید کاربران فعال را از بین میبرد و علت را اصلاح نمیکند.