ورودثبت‌ نام

مشکل پرداخت از طریق درگاههای اینترنتی پس از بروزرسانی .NET Framework به نسخه 4.8

مجید اطلس باف

از نسخه .NET Framework 4.7.2 به بعد امکان تنظیم ویژگی sameSite روی کوکی (Cookie) فراهم شده است. تا قبل از این بروزرسانی، مقدار هدر کوکی sameSite تنظیم نمی شده است که در حقیقت معادل SameSiteMode.None می باشد ولی از ورژن ذکر شده به بعد مقدار پیش فرض هدر کوکی sameSite وقتی مقداری برای آن تنظیم نشود، به صورت پیش فرض مقدار SameSiteMode.Lax درنظر گرفته می شود.

این تغییر مقدار پیش فرض باعث شده است تا ارسال اطلاعات از سایتهای دیگر (مثلا درگاههای پرداخت اینترنتی بانکها) به سایت مبدا با مشکل مواجه شود.

تغییر مقدار پیش فرض ویژگی SameSite برای کوکی باعث می شود تا سایتهای دیگر  وقتی به سایت اصلی از طریق متد POST اطلاعات ارسال می کنند، در Request ارسالی، کوکی مربوط به ASP.NET_SessionId در دسترس درخواست ارسال شده از سایت مزبور نباشد و در نتیجه Session جدیدی ایجاد می شود که این امر باعث می شود موقعی که کاربر از سمت درگاه بانکی به سایت اصلی برمی گردد با صفحه لاگین مواجه شود.
 
با توجه به شیوه عمل درگاههای بانکی، برای حل این مشکل لازم است تا در تگ sessionState در web.config اصلی سایت، ویژگی cookieSameSite مقدار None بگیرد تا امکان POST کردن اطلاعات درگاه بانکی از طریق Session فعلی کاربر به سایت مبدا امکانپذیر باشد (همانند نسخه های قبلی .net):

<sessionState ... cookieSameSite="None"  /> 

بروزرسانی 1:

مرورگر کروم از نسخه 80 به بعد انتظار دارد کوکیهایی که برای آنها SameSite="None" برای آنها تنظیم شده، پرچم secure هم برای آنها تنظیم شده باشد. در غیر اینصورت کوکی مربوطه را بلاک می کند و در بخش کنسول پیغام زیر را نمایش می دهد:

A cookie associated with a resource at http://domain.tld/ was set with `SameSite=None` but without `Secure`. It has been blocked, as Chrome now only delivers cookies marked `SameSite=None` if they are also marked `Secure`. You can review cookies in developer tools under Application>Storage>Cookies and see more details at https://www.chromestatus.com/feature/5633521622188032.

در نتیجه لازم است برای سایت خود SSL تهیه کنید و در web.config ویژگی requireSSL="true" را به تگ httpCookies اضافه کنید:

<httpCookies httpOnlyCookies="true" domain=".domain.tld" requireSSL="true" />

 

برای توضیحات بیشتر راجع به ویژگی SameSite در کوکی به صفحات زیر مراجعه کنید:

دیدگاه کاربران9

امیر

21 شهریور 1402

سپاس بی کران واقعا!! دمتون گرم

mohammad

21 شهریور 1402

سلام و عرض ادب ببخشید تو سایت ما وقتی کاربر تو مرورگر کروم پرداخت اینترنتی انجام می‌دهد، پیغام «متاسفیم، ولی مشکلی در گرفتن اطلاعات پرداخت پیش آمده است» می‌دهد و پرداخت انجام نمی‌شود یعنی مبلغ کسر میشه و بعد از مدت کوتاهی به حساب مشتری برگشت داده میشه. لازم به ذکر است این مشکل فقط تو مرورگر کروم فقط وجود داره و موزیلا این مشکل وجود نداره. ممنونم میشم راهنمایی بفرمایید

رضا خدائی

21 شهریور 1402

با سلام . ممنون مراجع به مطلب مفید شما. اگر از نسخه 5.2 دات نت در سایت استفاده کنیم و مرورگر کروم نسخه 80 به بالا باشه چه کاری باید انجام بدیم؟ ممنون

سعید

21 شهریور 1402

با سلام ممنون از مطالبتون ولی ما این موارد تو وب کانفیگ قرار دادیم ولی باز بعد از برگشت با کروم میره یه بروزر دیگه رو باز میکنه این مورد روی موبایل فقطم هست. ممنون میشم یه راهنمایی بفرمایید

امید

11 فروردین 1399

با سلام و خسته نباشید. متاسفانه ما هم تو سایتمون با این مشکل روبرو شدیم. در صورتی که کاربر با مرورگر کروم وارد صفحه درگاه پرداخت بشه و کارش بیش از یک دقیقه زمان ببره، موقع برگشت به سایت کوکی های یوزرنیم و پسورد حذف شده و کاربر لاگات میشه. این در حالیه که با بقیه مرورگرها مشکلی وجود نداره. ولی سایت ما PHP هست و از مدیریت محتوای دیتالایف استفاده میکنه. ممنون میشم اگر راه حل این مشکل رو در PHP هم توضیح بدین که چیکار کنیم. سپاس.

الهه

20 اسفند 1398

بسیار عالی بود.ممنون

HR

16 بهمن 1398

سلام. مطلب بسیار مفید و فوق العاده ای بود و مشکل من را حل کرد. با تشکر.

رضا

2 بهمن 1398

تشکر, مشکلمون حل شد. البته مشکل ما بعد از اپدیت گرفتن ویندور سرور بوجود امده بود. چون یک پچ امنیتی در رابطه با همین قضیه گرفته بود و مقدار پیش فرض samesite به lax تغییر می کرد.

دوستدار رزم آرا

2 دی 1398

سلام مطلب شما کمک زیادی کرد. بسیار بسیار سپاسگزارم.