由于公司需求,要求把地址直接放到iframe的src属性,进行直接跳转到内部页面,直接免登录操作;于是出现了cookie丢失的问题,导致登陆失败;
从谷歌浏览器会发现以下提示
,意思就是浏览器现在加上了SameSite的特性,谷歌浏览器的默认属性是SameSite=Lax,那就是禁止传递cookie的意思。想要传递这个cookie就要设置这个SameSite属性为None且带上Secure=True的设置;
既然知道了怎么回事,那就设置这个属性就行了吧。
根据实际情况,公司的后台服务是部署在IIS上面,直接说解决方法吧,1在传递cookie的asp.net页面添加请求头
,这样还不行,还要再iis上面进行URL重写,需要在服务器安装一个程序,叫:urlrewrite2.exe,百度一下就可以下载。
安装完后打开iis的网站,双击url重写,添加出站规则,填写如下信息
,然后配置文件会自动生成重写的内容
<system.webServer> <rewrite> <outboundRules> <remove name="AddSameSiteCookieFlag" /> <remove name="RESPONSE_X-AspNetMvc-Version" /> <remove name="RESPONSE_SERVER" /> <rule name="RESPONSE_SERVER" enabled="true"> <match serverVariable="RESPONSE_SERVER" pattern=".+" /> <conditions /> <action type="Rewrite" value="MYJ" /> </rule> <rule name="RESPONSE_X-AspNetMvc-Version" enabled="true"> <match serverVariable="RESPONSE_X-AspNetMvc-Version" pattern=".+" /> <conditions /> <action type="Rewrite" value="MYJ" /> </rule> <rule name="AddSameSiteCookieFlag" enabled="true" stopProcessing="true"> <match serverVariable="RESPONSE_Set-Cookie" pattern="^(.*)(CFID|CFTOKEN|SameSite)(=.*)$" /> <conditions /> <action type="Rewrite" value="{R:1};SameSite=None;Secure;" /> </rule> </outboundRules> </rewrite> </system.webServer>
重启站点,完成!