关于cookie中sessionid丢失的问题排查和解决--samesite(客户端app、服务器端asp.net)

问题描述:

  App登录后,访问接口失败,后台调试发现sessionid丢失。android手机有问题,ios没有问题。访问服务器没有问题,访问测试服务器有问题。

基本环境:

  客户端h5+ App应用,编译器HbuilderX;服务器端asp.net。

问题排查:

  通过手机抓包工具Fidder(如何使用参考我另外一篇微博)查看,发现第一次调用接口时,sessionid没有被缓存和提交给服务器。后续每次访问都相当于重新发起请求。

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

关于cookie中sessionid丢失的问题排查和解决--samesite(客户端app、服务器端asp.net)

第二次调用接口,没有把sessionid传给后台,导致后台又返回了sessionid

关于cookie中sessionid丢失的问题排查和解决--samesite(客户端app、服务器端asp.net)

 cookie中没有sessionid

关于cookie中sessionid丢失的问题排查和解决--samesite(客户端app、服务器端asp.net)

但前后台代码都没有做任何修改,且没有手动对cookie做操作,所以不可能是代码的原因。

同时发现部署到服务器,接口是可以访问的。于是比较了区别

关于cookie中sessionid丢失的问题排查和解决--samesite(客户端app、服务器端asp.net)

SameSite

本地环境是iis10.0的,服务器是iis7.5。返回的参数中多了SameSite=Lax的设置。SameSite相关说明请查看阮一峰的博客

当设置lax时,大部分情况不发送第三方Cookie。

关于cookie中sessionid丢失的问题排查和解决--samesite(客户端app、服务器端asp.net)

结论:

所以问题很明显了,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>

关于cookie中sessionid丢失的问题排查和解决--samesite(客户端app、服务器端asp.net)

再次查看 samesite属性已经消失,sessionid也被缓存了。

 关于cookie中sessionid丢失的问题排查和解决--samesite(客户端app、服务器端asp.net)

关于cookie中sessionid丢失的问题排查和解决--samesite(客户端app、服务器端asp.net)

 

关于cookie中sessionid丢失的问题排查和解决--samesite(客户端app、服务器端asp.net)

上一篇:Comparative assessment of long-read error-correction software applied to RNA-sequencing data 长读纠错软件应用于rna测序数据的比较评估


下一篇:将手机号中间四位变成*