مدتی ست کاربران از انجام پرداخت های آنلاین پس از برگشت به سایت و مشکل تراکنششان که به صورت ناقص انجام می شود نارضایتی های خودشان را اعلام داشند . در این مقاله قصد داریم جزئیات این اتفاق و روش حل مشکل تراکنش های ناموفق و لاگ اوت شدن کاربران را شرح دهیم.
این مشکل در مرداد ماه شدت گرفت و سایتهای زیادی را تحت پوشش این مشکل قرار داد از جمله سایت های اپن کارتی، جوملایی، وردپرس، پرستاشاپ و حتی سایت هایی با طراحی و برنامه نویسی اختصاصی. در بعضی سایت های دولتی مانند تامین اجتماعی نیز این مشکل مشاهده شده است.
با بررسی لاگ بروزرسانی مرورگرها متوجه شدیم مرورگر کروم و پشت بند آن مرورگر فایرفاکس (موزیلا) تغییراتی در زمینه با بحث کوکیها داشته اند که باعث این مشکلات شده است.
مشکل چه بود؟
کاربر وقتی از سایتی به سمت درگاه پرداخت ارجاع می شد و پرداخت را انجام می داد درهنگام برگشت از درگاه به سایت مبدا تراکنش تایید و وریفای نمی شد و در سایت هایی که کاربر لاگین شده بود نیز از سایت لاگ اوت می شد در نتیجه تراکنش ناقص شده و پول به حساب کاربر برگشت می خورد. حتی اگر کاربر به درگاه پرداخت می رفت و انصراف را هم انتخاب می کرد با صفحه لاگ اوت شده از سایت روبرو می شد.
این مورد ابتدا در مرورگر کروم و سپس در مرورگر فایرفاکس شروع به رخ دادن نمود.
علت این مشکل چیست ؟
مرورگر کروم در وبلاگ خود اعلام کرد در نسخه ۸۰ به بعد اقدام به اجرای یک سیستم طبقه بندی کوکیهای امن و پیش فرض خواهد کرد. برای کوکیهایی که مقدار دهی SameSite
را انجام نداده باشند بصورت پیش فرض مقدار دهی SameSite=Lax
را در نظر خواهد گرفت. و تنها کوکی هایی که بر اساس SameSite=None; Secure
تنظیم شده باشند در زمینه با محتوای خارجی در اتصال امن در دسترس خواهند بود. در نتیجه کوکیهایی که این شرایط را نداشته باشند مسدود شده و حذف می شوند.
پس از آن فایرفاکس نیز به این قانون پیوست و در نسخه های جدید این قوانین را اعمال کرده است.
راه حل رفع این مشکل چیست ؟
راه حل این مشکل، ست کردن کوکی ها بر اساس SameSite=None; Secure
می باشد که هر سی ام اس و فریم ورکی شرایط و کدهای مربوط به خود را در این زمینه دارد.
ما به شما در ادامه چند راه حل برای رفع این مشکل در سایت های وردپرسی خواهیم داد.
نصب و فعالسازی SSL و اجباری کردن آن بر روی سایت ( مهم )
برای تهیه SSL می توانید از هاستینگ خود اقدام به خرید و یا استفاده از SSL رایگان نمایید.
بعد از نصب شدن SSL باید آن را بر روی سایت خود فورس کنید ، ساده ترین روش استفاده از افزونه Really Simple SSL است.
1. راه حل اول مخصوص سایت های وردپرسی
برای این منظور گروه طراحی نسیم نت افزونه ای را طراحی کرده است که با نصب آن مشکل شما حل خواهد شد.
افزونه را از اینجا دانلود کنید و سپس بر روی سایت خود نصب نمایید.
بعد از نصب و فعالسازی لازم است که با یوزری که در حال تست هستید حتما در سایت لاگ اوت کرده و تمامی کوکی ها و کش مرورگر خود را حذف نمایید و سپس در سایت لاگین کنید و تست خود را انجام دهید.
2. راه حل دوم از طریق htaccess
وارد هاست خود شده و در روت هاست خود به دنبال فایل .htaccess
بگیردید و سپس آن را ویرایش کنید.
یک خط کد به فایل .htaccess
(نقطه در ابتدای نام فایل قرار دارد) سایتتان اضافه نمایید.
کدی که باید به فایل .htaccess
اضافه نمایید:
<ifmodule mod_headers.c>
Header always edit Set-Cookie ^(.*)$ $1;SameSite=None;Secure
</ifmodule>
بعد از اعمال نمودن کد بالا ، کش مرورگر و کش سایت را حذف نمایید و یک تراکنش تست انجام دهید اگر مشکلی مشاهده نشد بدین معناست که کار به درستی انجام شده است و اگر همچنان مشکل وجود داشت یعنی نسخه آپاچی سرور شما پایین تر از نسخه 2.2.4 است و لازم است کد را پاک نموده و مرحله بعد را تست کنید.
3. راه حل سوم از طریق نصب افزونه در سایت های وردپرس
در وردپرس برای رفع این مشکل پلاگینی منتشر شده است قبل از استفاده از دیگر راه حل های ما پیشنهاد می کنیم پلاگین SameSite Cookies را از طریق بخش افزونه ها نصب نموده و فعال نمایید.
سپس در فایل wp-config.php
کد زیر را اضافه نموده و ذخیره کنید:
define( 'WP_SAMESITE_COOKIE', 'None' );
در نهایت کش مرورگر و وردپرس در تمام بخش ها را خالی کنید و سپس تست نمایید ، اگر مشکل برطرف نشده بود و یا در سایتان اختلالی رخ داد کد اضافه شده را حذف نموده و پلاگین را پاک کنید.
4. راه حل چهارم از طریق اضافه کردن کد برای سایت های وردپرسی
این راه حل برای سایت هایی که به زبان php طراحی شده اند می باشد. اگر با این موارد آشنایی ندارید این روش برای شما پیشنهاد نمی شود.
در ابتدا مطمئن شوید که گواهی SSL برای دامنه شما فعال می باشد و استفاده از HTTPS برای تمام بخش های سایت از جمله بخش مدیریت و بخش کاربری اجباری می باشد.
کد زیر را می توانید در ابتدای کدهای فایل wp-config.php
خود قرار دهید.
session_set_cookie_params( null, '/; SameSite=None', null, 1 );