公司内部系统,有一个A系统主网页
asys.aaa.sample.com
这个页面内部以iFrame的形式嵌入了另一个B系统的页面
bsys.bbb.sample.com
B系统有自己的登录逻辑,并且会在Cookies中保存后端SessionID;B系统正常的登录逻辑是验证账户和密码后,给前端返回Set-Cookie,设置登录态信息,后续无需重复登录
在单独的页面中打开B系统可以正常登录,且持有、保持登录态
但从A系统页面访问的时候,iFrame中的B系统页面登录失效,一直循环在登录页面
通过审查页面元素,发现B系统页面的网络请求返回出现浏览器提示warning
原来通过iFrame访问B系统页面的时候,浏览器识别到为跨域请求,所以Set-Cookie失效,无法保持登录态
提示信息中表明,可以通过设置 Set-Cookie中 的 SamSite=None 来实现跨站点访问
后端改造
后端是采用Flask实现的Web服务,使用 flask_cors + flaks_cas 模块提供的功能实现登录验证
需要设置Cookie的SamsSite属性,只需要在flask app的config里面设置相应的属性即可
需要注意的是,设置 SameSite=None 的前提是,该页面使用https协议,且 设置 Secure 属性为 True, 如上图红框所示
到此,在A系统iFrame中嵌入的页面也可以实现正常登录和登录态保持~~