使⽤iframe进⾏单点登录传递cookie
由于公司需求,要求把地址直接放到iframe的src属性,进⾏直接跳转到内部页⾯,直接免登录操作;于是出现了cookie丢失的问题,导致登陆失败;
从⾕歌浏览器会发现以下提⽰
,意思就是浏览器现在加上了SameSite的特性,⾕歌浏览器的默认属性是SameSite=Lax,那就是禁⽌传递cookie的意思。想要传递这个cookie就要设置这个SameSite属性为None且带上Secure=True的设置;
既然知道了怎么回事,那就设置这个属性就⾏了吧。
根据实际情况,公司的后台服务是部署在IIS上⾯,直接说解决⽅法吧,1在传递cookie的asp页⾯添加请求头
,这样还不⾏,还要再iis上⾯进⾏URL重写,需要在服务器安装⼀个程序,叫:,百度⼀下就可以下载。
安装完后打开iis的⽹站,双击url重写,添加出站规则,填写如下信息
,然后配置⽂件会⾃动⽣成重写的内容
<system.webServer>
<rewrite>
<outboundRules>
html实现用户注册登录代码<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>
重启站点,完成!