ব্রাউজারটি আমাদের সাইটে পেমেন্ট গেটওয়ের পোস্টের অনুরোধে এএসপি.এন.ইস.এসশন কুকি সেট করবে না


12

আমরা আমাদের ওয়েব অ্যাপ্লিকেশনটির অর্থপ্রদান প্রক্রিয়াটি নিয়ে একটি অদ্ভুত সমস্যাটি অনুভব করছি যার ফলে সেশন ডেটা হারাবে।

এই প্রক্রিয়াতে, আমাদের চেক-আউট পৃষ্ঠা ব্যবহারকারীর প্রদানের সরবরাহকারীর পৃষ্ঠায় পুনঃনির্দেশিত করার পরে এবং সেখানে কাজ শেষ হওয়ার সাথে সাথে আমাদের সাইটে (আমরা উল্লেখ করা url- এ) পুনঃনির্দেশিত করা হবে। এই শেষ পুনর্নির্দেশটি ব্রাউজারের অর্থ প্রদানের প্রদানকারীর এইচটিএমএল কোডের মূল্যায়নের মাধ্যমে করা হয় যা মূলত আমাদের সাইটে পোস্ট হওয়া ফর্ম এবং জাভাস্ক্রিপ্ট কোডের কয়েকটি লাইন যা পৃষ্ঠা লোডে ফর্ম পোস্ট করে। এই মুহুর্তে ব্রাউজারটি পোস্ট অনুরোধ করে তবে ঠিক একই ডোমেনে (আমাদের অ্যাপ্লিকেশনটির ডোমেন) পূর্ববর্তী অনুরোধগুলিতে উপস্থিত "ASP.NET_SessionId" কুকি সেট করে না। সবচেয়ে বিস্ময়কর বিষয়টি এটি হ'ল "অ্যাকসেপ্টকুকি" নামে একটি অন্য কুকি সেট করে। এটি কেবল "ASP.NET_SessionId" কুকি বাদ দেওয়ার জন্য পছন্দ করে।

পরিস্থিতি চিত্রিত করতে আমি কিছু স্ক্রিনশট নিলাম। (এই স্ক্রিনশটগুলিতে কমলা এবং সবুজ আয়তক্ষেত্রে হুবহু একই মান রয়েছে))

  1. ব্যবহারকারীরা "চেক আউট" বোতাম টিপলে এটি আমাদের অনুরোধটি করেছে (আমাদের অ্যাপ্লিকেশনটিতে)। এই অনুরোধের পরে ব্যবহারকারীকে অর্থ প্রদানকারীর পৃষ্ঠায় পুনঃনির্দেশ করা হয়েছে।

চেক আউট অনুরোধ

  1. এটি চূড়ান্ত পৃষ্ঠা যা ব্যবহারকারী প্রদান করার পরে প্রদানকারীর দ্বারা পরিবেশন করা হয়। আপনি দেখতে পাচ্ছেন এটি কেবলমাত্র একটি সাধারণ ফর্ম যা পৃষ্ঠা লোডে আমাদের ডোমেনে স্বয়ংক্রিয়ভাবে পোস্ট হয়।

প্রদানকারীর চূড়ান্ত প্রতিক্রিয়া

  1. তবে এই পোস্টের অনুরোধটিতে "ASP.NET_SessionId" কুকি অন্তর্ভুক্ত নয় যা একটি নতুন সেশন আইডি অর্জন এবং পূর্ববর্তী সেশনের ডেটা হ্রাস করার ফলাফল দেয়। এবং আবারও, কেবল "এএসপি.এনইT_সেশনআইডি" অনুপস্থিত, "একসেপ্টকুকি" নামে অন্য কোনওটি নয়।

অনুরোধ পোস্ট করুন যা ব্যবহারকারীকে আমাদের সাইটে ফিরিয়ে আনবে (পূর্ববর্তী পদক্ষেপে জাভাস্ক্রিপ্ট দিয়ে তৈরি)

অবশেষে আমরা বুঝতে পেরেছি যে ব্রাউজারগুলির পুরানো সংস্করণগুলিতে এই সমস্যাটি দেখা দেয় না। ফায়ারফক্স ৫২ এ এটি কবজির মতো কাজ করে তবে ফায়ারফক্স 71১ এ উপরের সমস্যাটি ঘটে।

কোন ধারনা?

দ্রষ্টব্য: এটি একটি ASP.NET MVC অ্যাপ্লিকেশনটি লক্ষ্য ফ্রেমওয়ার্ক = "4.5.2" সহ

আপনার দিনটি শুভ হোক.

উত্তর:


16

আমরা এটি বের করেছিলাম।

কোনওভাবে "এএসপি.এনইT_সেশনআইডি" কুকির "সমেসাইট" বৈশিষ্ট্যটি "লক্ষ" -এ ডিফল্ট হয়েছে এবং এর ফলে পেমেন্ট গেটওয়ের জাভাস্ক্রিপ্ট কোড দ্বারা করা অনুরোধে সেশন কুকি যোগ করা হয়নি।

এই মানটিকে ওভাররাইড করতে এবং এটি "কিছুই নয়" এ সেট করার জন্য আমরা ওয়েবকনফিগ ফাইলটিতে নিম্নলিখিত নিয়ম যুক্ত করেছি।

<configuration>
  <system.webServer>
    <rewrite>
      <outboundRules>
        <rule name="Add SameSite" preCondition="No SameSite">
          <match serverVariable="RESPONSE_Set_Cookie" pattern=".*" negate="false" />
          <action type="Rewrite" value="{R:0}; SameSite=None" />
          <conditions>
          </conditions>
        </rule>
        <preConditions>
          <preCondition name="No SameSite">
            <add input="{RESPONSE_Set_Cookie}" pattern="." />
            <add input="{RESPONSE_Set_Cookie}" pattern="; SameSite=None" negate="true" />
          </preCondition>
        </preConditions>
      </outboundRules>
    </rewrite>
  </system.webServer>
</configuration>

আপডেট 1 : সবেমাত্র উপরের কনফিগারেশনটি যুক্ত করা আধুনিক ব্রাউজারগুলির সমস্যার সমাধান করেছে তবে আমরা বুঝতে পেরেছিলাম যে আমরা এখনও মাইক্রোসফট এজ এবং ইন্টারনেট এক্সপ্লোরার এর পুরানো সংস্করণ নিয়ে সমস্যা করছি।

সুতরাং আমাদের ওয়েলকনফিগ ফাইলে সেশনস্টেট নোডে কুকিসেমসাইট = "কিছুই নয়" বৈশিষ্ট্য যুক্ত করতে হবে।

<sessionState cookieSameSite="None" />

পুরানো। নেট ফ্রেমওয়ার্ক সংস্করণগুলি এটি সমর্থন করে না এবং আপনার সাইটের ত্রুটি পৃষ্ঠা প্রদর্শন করার কারণ হিসাবে এই কনফিগারেশন পরিবর্তনের সাথে সতর্ক থাকুন।

আইওএস 12-তে ব্রাউজারগুলির সাথে এখনও আমাদের সমস্যা রয়েছে But তবে আমি মনে করি এটি এটি নিশ্চিত হওয়া বাগের সাথে সম্পর্কিত

আপডেট 2 : আইওএস ইস্যু সম্পর্কে সম্ভাব্য ফিক্সের জন্য জিমিয়ানের উত্তর দেখুন

আপডেট 3 : জিমিয়ানের উত্তরের পরামর্শগুলির সাথে আমাদের অনুসন্ধানগুলি একত্রিত করে আমরা নিম্নলিখিত পুনর্লিখনের বিধিগুলি নিয়ে এসেছি। আমরা উত্পাদন এই কনফিগারেশন ব্যবহার করা হয়েছে। তবে সাবধান থাকুন: এটি সামঞ্জস্যযুক্ত ব্রাউজারগুলির জন্য সমস্ত কুকিগুলিকে "সেমসাইট: কিছুই নয়" চিহ্নিত করে এবং বেমানান ব্রাউজারগুলির জন্য সেমসাইট বৈশিষ্ট্যটি উপস্থিত থাকলে তা বাদ দেয়। এটি জটিল মনে হতে পারে তবে আমি মন্তব্য লাইনের মাধ্যমে ব্যাখ্যা করার চেষ্টা করেছি।

এটি আমরা উত্পাদনে ব্যবহৃত ফাইনাল কনফিগারেশন:

<configuration> 

  <system.webServer>

    <rewrite>

      <outboundRules>

        <preConditions>
          <!-- Browsers incompatible with SameSite=None -->
          <preCondition name="IncompatibleWithSameSiteNone" logicalGrouping="MatchAny">
            <add input="{HTTP_USER_AGENT}" pattern="(CPU iPhone OS 12)|(iPad; CPU OS 12)" />
            <add input="{HTTP_USER_AGENT}" pattern="(Chrome/5)|(Chrome/6)" />
            <add input="{HTTP_USER_AGENT}" pattern="( OS X 10_14).*(Version/).*((Safari)|(KHTML, like Gecko)$)" />
          </preCondition>

          <!-- Rest of the browsers are assumed to be compatible with SameSite=None -->
          <preCondition name="CompatibleWithSameSiteNone" logicalGrouping="MatchAll">
            <add input="{HTTP_USER_AGENT}" pattern="(CPU iPhone OS 12)|(iPad; CPU OS 12)" negate="true" />
            <add input="{HTTP_USER_AGENT}" pattern="(Chrome/5)|(Chrome/6)" negate="true" />
            <add input="{HTTP_USER_AGENT}" pattern="( OS X 10_14).*(Version/).*((Safari)|(KHTML, like Gecko)$)" negate="true" />
          </preCondition>

        </preConditions>

        <!-- Rule 1: Remove SameSite part from cookie for incompatible browsers if exists -->
        <rule name="Remove_SameSiteCookie_IfExists_ForLegacyBrowsers" preCondition="IncompatibleWithSameSiteNone">
          <match serverVariable="RESPONSE_Set-Cookie" pattern="(.*)(SameSite=.*)" />
          <action type="Rewrite" value="{R:1}" />
        </rule>

        <!-- Rule 2: Override SameSite's value to None if exists, for compatible browsers -->
        <rule name="Override_SameSiteCookie_IfExists_ForModernBrowsers" preCondition="CompatibleWithSameSiteNone">
          <match serverVariable="RESPONSE_Set-Cookie" pattern="(.*)(SameSite=.*)" />
          <action type="Rewrite" value="{R:1}; SameSite=None" />
        </rule>

        <!-- Rule 3: Add SameSite attribute with the value None if it does not exists, for compatible browsers -->
        <rule name="Add_SameSiteCookie_IfNotExists_ForModernBrowsers" preCondition="CompatibleWithSameSiteNone">
          <match serverVariable="RESPONSE_Set-Cookie" pattern=".*"/>
          <!-- Condition explanation: Cookie data contains some string value but does not contain SameSite attribute -->
          <conditions logicalGrouping="MatchAll">
            <add input="{R:0}" pattern="^(?!\s*$).+"/>
            <add input="{R:0}" pattern="SameSite=.*" negate="true"/>
          </conditions>
          <action type="Rewrite" value="{R:0}; SameSite=None" />
        </rule>

      </outboundRules>

    </rewrite>    

  </system.webServer>  

</configuration>

ধন্যবাদ @ ইজগুর এই সমস্যাটি KB4533097 ( সমর্থন. microsoft.com/en-us/help/4533097/kb4533097 ) থেকে সুনির্দিষ্টভাবে KB4533011 (.NET 4.7 এবং নিম্ন) এবং KB4533004 (। নেট 4.8) 10 ই ডিসেম্বর প্রকাশিত হয়েছে
এস পাইনা

আমার একই সমস্যা রয়েছে তবে মাঝে মাঝে এসপ নেটওয়্যার এমভিসি গ্রাহককে এএসপি দেয় E কেন এটি সুখী হয় আমি নিশ্চিত নই। আমি বলতে চাইছি এটি সর্বদা শিথিল হওয়া উচিত, তবে এখনও আমি সাইটে লগইন করলে আমি কিছুই পাই না।
ডিউক

ওহ মানুষ! আমি দু'দিন ধরে এই সমস্যাটি নিয়ে পাগল হয়েছি। অবশেষে আপনার উত্তর আমার দিন এবং হতাশাকে বাঁচিয়েছে। ধন্যবাদ।
হেমন্ত

1
ডিসেম্বর আপডেট প্রয়োগের পরে আমাদের সার্ভার 2016 এ এই সমস্যাটি হয়েছিল। (KB4530689)। সমাধান সন্ধানের জন্য অনেক ধন্যবাদ!
user0474975

এটি কি কেবল ডটনেট কোরের জন্য? আমার ফ্রেমওয়ার্ক অ্যাপ্লিকেশনটিতে আমি সেগুলিতে আপনার বিকল্পগুলি অবৈধ মান হিসাবে দেখিয়ে দিচ্ছি।
আয়রনসিয়ান

3

আমি এই URL টি পুনর্লিখনের সাথে উপস্থিত হয়ে বেশ কয়েকটি এসও উত্তরের উপর পরিবর্তন করেছি যা SameSite=Noneসেশন কুকিজগুলিতে যুক্ত করে এবং বেশিরভাগ বেমানান ব্রাউজারগুলির জন্য সমস্ত কুকিজ SameSite=Noneথেকে অপসারণ করে। এই পুনর্লিখনের উদ্দেশ্য হ'ল "উত্তরাধিকার" আচরণটি প্রাক-ক্রোম 80-র সংরক্ষণ করা।

আমার কোডার ফ্রন্টলাইন ব্লগে সম্পূর্ণ লেখার আপ :

<rewrite>
  <outboundRules>
    <preConditions>
      <!-- Checks User Agent to identify browsers incompatible with SameSite=None -->
      <preCondition name="IncompatibleWithSameSiteNone" logicalGrouping="MatchAny">
        <add input="{HTTP_USER_AGENT}" pattern="(CPU iPhone OS 12)|(iPad; CPU OS 12)" />
        <add input="{HTTP_USER_AGENT}" pattern="(Chrome/5)|(Chrome/6)" />
        <add input="{HTTP_USER_AGENT}" pattern="( OS X 10_14).*(Version/).*((Safari)|(KHTML, like Gecko)$)" />
      </preCondition>
    </preConditions>

    <!-- Adds or changes SameSite to None for the session cookie -->
    <!-- Note that secure header is also required by Chrome and should not be added here -->
    <rule name="SessionCookieAddNoneHeader">
      <match serverVariable="RESPONSE_Set-Cookie" pattern="((.*)(ASP.NET_SessionId)(=.*))(SameSite=.*)?" />
      <action type="Rewrite" value="{R:1}; SameSite=None" />
    </rule>

    <!-- Removes SameSite=None header from all cookies, for most incompatible browsers -->
    <rule name="CookieRemoveSameSiteNone" preCondition="IncompatibleWithSameSiteNone">
      <match serverVariable="RESPONSE_Set-Cookie" pattern="(.*)(SameSite=None)" />
      <action type="Rewrite" value="{R:1}" />
    </rule>
  </outboundRules>
</rewrite>

এটি বেশিরভাগ এএসপি। নেট এবং এএসপি। নেট কোর অ্যাপ্লিকেশনগুলির জন্য কাজ করা উচিত, যদিও নতুন ফ্রেমওয়ার্কগুলিতে আপনাকে এই আচরণটি নিয়ন্ত্রণ করতে দেয় সঠিক কোড এবং কনফিগারেশন বিকল্প রয়েছে। আমি উপরের আমার পুনর্লিখনটি ব্যবহার করার আগে আপনাকে উপলভ্য সমস্ত বিকল্পগুলি নিয়ে গবেষণা করার পরামর্শ দেব।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.