• 关于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也被缓存了。

     

  • 相关阅读:
    day55---前端基础之BOM操作和DOM操作
    每日作业5/8
    数据库之索引
    数据库之视图、触发器、事务、存储过程、内置函数、流程控制
    每日作业5/7
    数据备份与pymysql模块
    Navicat与MySQL使用
    每日作业5/6
    数据库之多表查询
    数据库之单表查询
  • 原文地址:https://www.cnblogs.com/liangtao999/p/13755689.html
Copyright © 2020-2023  润新知