iOS cookie 设置问题:safari 和 chrome
Posted
技术标签:
【中文标题】iOS cookie 设置问题:safari 和 chrome【英文标题】:iOS cookie setting issue: safari and chrome 【发布时间】:2017-07-10 21:56:17 【问题描述】:我正在调试一个 cookie 设置问题,该问题仅在 ios 上的 Chrome 和 Safari 中重现。下面的代码块在 OSX 上的 Chrome/Safari/Firefox 上运行良好:
if (navigator.userAgent.indexOf('iPad') > -1)
window.onpagehide = placeCookie
else
window.onbeforeunload = placeCookie
function placeCookie ()
if (isAuthenticated())
var cookie = 'cookieName=' + token + '; max-age=60'
if (env === 'prod')
cookie += '; secure'
document.cookie = cookie
此代码用于在窗口检测到导航时放置一个 cookie。在我们的例子中,因为它是 angularjs,我们正在监听页面重新加载,并且我们希望该 cookie 与请求一起使用。
重新加载代码:window.location.reload(true)
为了开发,我使用 Charles Proxy 来嗅探 cookie,并检查节点服务器上的 cookie,因为 safari 检查器在页面重新加载时关闭。当我重新打开检查器窗口时,我可以看到在浏览器中设置了 cookie,但服务器或 Charles 都看不到 cookie。这是 iPad 上 safari 检查器的 cookie 粘贴(server/charlesproxy 看不到):
Name Value Domain Path Expires
cookieName token localhost.charlesproxy.com / 7/10/2017, 11:23:13 PM 39
当我在其他浏览器上单步执行时,cookie 随处可见。
有人知道 iOS 不承认 cookie 的任何原因吗?是否有可能在放置 cookie 之前在 iOS 上发出请求?
如果我可以提供更多信息,请告诉我。
【问题讨论】:
为了清楚起见,您试图在他们导航到不同页面之前设置 cookie,并且 cookie 没有在下一页请求中发送? 这是我们正在监听的页面重新加载,因为它是一个 SPA,但除此之外,您是正确的。 如何重新加载页面? window.location.reload(true) 【参考方案1】:我们使用
function setCookie(name, value, days = 7, path = '/')
const expires = new Date(Date.now() + days * 864e5).toUTCString()
document.cookie = name + '=' + encodeURIComponent(value) + '; expires=' + expires + '; path=' + path
setCookie('cookieName', accessToken, 1);
它适用于所有设备/浏览器(据我所知 - 不是每个组合都经过测试,但肯定是在带有 Chrome/Safari 的 iPhone/Mac 和带有 Chrome 的 PC 上。)设置/保留 cookie。
它与您显示的代码(用于基本 cookie 创建)没有显着不同,并且可能仍然无法满足您的使用需求,但可能值得一试....
这是 getCookie 方面(我没有编写此代码 - 在某处捡到它 - 很可能! - 我只知道它很好用!:)
function getCookie(c_name)
if (document.cookie.length > 0)
c_start = document.cookie.indexOf(c_name + "=");
if (c_start !== -1)
c_start = c_start + c_name.length + 1;
c_end = document.cookie.indexOf(";", c_start);
if (c_end === -1)
c_end = document.cookie.length;
return unescape(document.cookie.substring(c_start, c_end));
return "";
【讨论】:
以上是关于iOS cookie 设置问题:safari 和 chrome的主要内容,如果未能解决你的问题,请参考以下文章
Safari 不接受 Cookie 而 FF 和 IE 接受
iOS 和 OS X 上的原生应用程序能否写入和读取 Safari 的网站数据,例如 cookie 和 Web Storage?
如何将 cookie 从我的 ios 应用程序共享到移动 safari?