我正在调试一个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上发出请求?
如果我能提供更多信息,请告诉我。
答案 0 :(得分:0)
我们使用
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创建)没有显着差异,并且可能仍然无法满足您的使用需求,但值得一试。...
这是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 "";
}