關於cookie中sessionid丟失的問題排查和解決--samesite(客戶端app、服務器端asp.net)


問題描述:

  App登錄后,訪問接口失敗,后台調試發現sessionid丟失。android手機有問題,ios沒有問題。訪問服務器沒有問題,訪問測試服務器有問題。

基本環境:

  客戶端h5+ App應用,編譯器HbuilderX;服務器端asp.net。

問題排查:

  通過手機抓包工具Fidder(如何使用參考我另外一篇微博)查看,發現第一次調用接口時,sessionid沒有被緩存和提交給服務器。后續每次訪問都相當於重新發起請求。

第一次調用接口,有返回sessionid

第二次調用接口,沒有把sessionid傳給后台,導致后台又返回了sessionid

 cookie中沒有sessionid

但前后台代碼都沒有做任何修改,且沒有手動對cookie做操作,所以不可能是代碼的原因。

同時發現部署到服務器,接口是可以訪問的。於是比較了區別

SameSite

本地環境是iis10.0的,服務器是iis7.5。返回的參數中多了SameSite=Lax的設置。SameSite相關說明請查看阮一峰的博客

當設置lax時,大部分情況不發送第三方Cookie。

結論:

所以問題很明顯了,iis 10.0環境導致cookie默認參數中帶了samesite參數。而這個參數將導致cookie不發送到服務器。需要手動將samesite設置為None。

解決方案:

具體如何設置samesite,參考

webconfig中設置

<rewrite>
      <outboundRules>
           <rule name="RemoveSameSiteCookieFlag">
              <match serverVariable="RESPONSE_Set-Cookie" pattern="^(.*ASP.NET_SessionId.*)(; SameSite=Lax)(.*)$" />
                    <action type="Rewrite" value="{R:1}{R:3}" />
           </rule>
      </outboundRules>
</rewrite>

再次查看 samesite屬性已經消失,sessionid也被緩存了。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM