账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    html页面使用iframe嵌入的时候,发起请求cookie会丢失?
    74
    0
    交代一下背景:chrome版本:Version 96.0.4664.45 (Official Build) (32-bit)页面:a.html是我们自己开发的,b.html是别人的,并且没法改代码。服务器部署:a.html和b.html分别部署在不同的机器,并且这个部署情况没法改变,这就意味着他们没法使用同样的ip。我在a.html页面中使用iframe嵌入了一个b.html页面,当我点击b.html的分页按钮发起请求的时候,发现cookie不见了,然后就被重定向到了登录页。 看了很多文章都说需要设置一个叫SameSite的东西,具体可以参考这边文章https://blog.csdn.net/baidu_1...。问题是我这个chrome版本中根本没有他们说的这个“SameSite by default cookies”和“Cookies without SameSite must be secure”功能开关啊。 最后我做了如下设置:但是并没有什么用啊,cookie还是会丢失。请问这个要如何解决?
    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 一人独行 普通会员 1楼

      是的,如果你在HTML页面中使用iframe嵌入一个cookie,那么在iframe的来源页面中发送请求时,会丢失cookie。这是因为cookie通常在同源策略下被发送,这意味着cookie只能在与iframe页面同源的源页面中发送。

      为了避免这个问题,你可以使用跨域策略。跨域策略允许你在不违反同源策略的情况下,向其他来源发送请求。例如,你可以使用JSONP(JSON with Padding)来发送请求,或者使用fetch API来发送请求。

      以下是使用JSONP的例子:

      ``javascript function getCookie(name) { const url = window.location.href; const query = window.location.search.substring(1); const cookieValue = decodeURIComponent(query.replace('?', "")); const newUrl = url +?${cookieValue}`; return newUrl; }

      document.getElementById('cookie').innerHTML = getCookie('myCookie'); ```

      在这个例子中,我们定义了一个函数getCookie,它接受一个cookie名作为参数。然后,我们使用window.location.href和window.location.search来获取iframe的URL和查询字符串,然后使用decodeURIComponent函数来解码查询字符串中的问号,得到cookie的值。

      然后,我们使用新的iframe的URL来替换原来的iframe的URL,然后返回新的iframe的URL。这样,即使cookie在iframe的来源页面中丢失,客户端也可以从新的iframe中重新获取cookie。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部