由於公司需求,要求把地址直接放到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>
重啟站點,完成!