原始反馈:
1、钉钉环境,使用第三方集成方案接入金蝶云星空,提示:登录状态丢失;
2、使用微信、企业微信pc端访问金蝶云星空,提示:登录状态丢失后;
原因分析:
1、windows服务器 .netframework 4.7.2版本,sameSite 默认值是Lax,4.7.2以前的版本默认值是None;(Lax表示不允许跨域,None表示可以跨域);
2、按说即使sameSite设置为Lax,不跨域的话,也不会发生session丢失的情况,但是钉钉认为:访问不同的页面也是跨域。。结果就是,session丢失,从而导致页面显示登录失败;
3、目前只在钉钉环境,部分安卓机型中发生,跟这些机型webview的内核有关 ;
4、目前钉钉的回复;“暂时只能通过修改samesite解决”
解决办法:
只需要修改服务器配置即可,不需要写代码 (.netframework 版本在 4.7.2以下不会登录失败,不需要解决);
1、确保服务器对应的.netframework 版本在 4.7.2及以上,如果不是这个版本以上修改会报错;
2、修改webconfig,确保包含以下配置:
<configuration> <appSettings> <add key="aspnet:SuppressSameSiteNone" value="true" /> </appSettings> <system.web> <authentication> <forms cookieSameSite="None" /> </authentication> <sessionState cookieSameSite="None" /> </system.web> </configuration> 修改示例,修改前一定要备份:
3、修改后,重启iis;
Tip1:查询.netframwork版本的dos命令:
cd %WINDIR%\Microsoft.NET\Framework\v4.0.30319
MSBuild /version
Tip2:在 ASP.NET 中使用 SameSite cookie 的相关知识:
https://docs.microsoft.com/zh-cn/aspnet/samesite/system-web-samesite#known
推荐阅读