تغییرات در کوکیهای مرورگرها samesite از کروم ورژن 80
شاید برای شما نیز اتفاق افتاده باشد که سایت شما در ورژنهای جدید کروم 85 و فایرفاکس خطای مثل شکل بالا نمایش داده شود و کوکی شما به صفحات وب شما اضافه نشود.
این مشکل برای من در فریم ورک جنگو اتفاق افتاد من سایتی با ورژن 2.2.5 نوشته بودم که back-end آن جنگو و قسمت فرانت آن Reactjs بود سایت به خوبی مار میکرد تا اینکه در ورژنهای جدید مرورگرها پچار مشکل شد. SameSite Cookie باعث میگردد تا اگر دامنه فرانت از بک اند شما جدا است، اجازه ایجاد کوکی های امن (secure) را ندهد و تگ Httponly دارند اجازه ایجاد نداشته باشند.
تا یک سال پیش ۲ نوع پارامتر برای samesite وجود داشت یک lax , strict
استفاده از lax باعث میشود بعضی از کوکیها به صورت cross site ارسال شوند، درصورتی که این درخواستها به صورت GET or HEAD و نه POST تا کوکی ذخیره شود.
در حالت strict اجازه ارسال و ذخیره کوکی در حالت cross site امکان پذیر نیست.
پس اگر نیاز بود که در حالت POST این کوکیها ست شوند باید چه کرد؟
سایت من همین مشکل را داشت این مشکل در جنگو ۳ حل شده و با تغییر در تنظیمات و تغییر samesite به None این مشکل رفع میگردد.
CSRF_COOKIE_SECURE = True
SESSION_COOKIE_SECURE = True
CSRF_COOKIE_SAMESITE = 'None'
SESSION_COOKIE_SAMESITE = 'None'
در جنگو ۳ حل شد ولی شاید شما هم مثل من پروژه با جنگو ۲ دارید حال باید چه کرد ؟
در نگاه اول در گیت کتابخانه وجود دارد
pip install django-cookies-samesite
MIDDLEWARE_CLASSES = ( 'django_cookies_samesite.middleware.CookiesSameSite', ... )
SESSION_COOKIE_SAMESITE = 'None' # or DCS_SESSION_COOKIE_SAMESITE = 'None'
ولی این روش کار نکرد برای من خب با جستجوی زیاد به کتابخانهایی رسیدم با نام
این کتابخانه تغییر MIDDLEWARE
باعث میگردد تا جنگو ۲ از خاصیت None = samesite بهره ببرد،
خب فقط کتابخانه را نصب کنید.
pip install django-samesite-none
در مرحله بعد MIDDLEWARE
را اضافه کنید هورااا مشکل حل شد:).
MIDDLEWARE = [ "django_samesite_none.middleware.SameSiteNoneMiddleware", ... ]