IOS:javascript cookie 在 safari 或 chrome 等 iOS 浏览器上不起作用



我正在使用js将我的购物清单存储在 cookie.it 中,在Windows或Macintosh或Android手机上工作正常,但在iPhone移动浏览器(safari和chrome(上不起作用.在食物页面中,我将食物添加到我的列表中,刷新页面或重定向到其他页面后,cookie为空。

我已经尝试了两种方法来编写cookie,并且还使用了cookie参数,但问题仍然存在。

这是我设置 cookie 的代码:

function bake_cookie(name, value) {
  var date, 
  date = new Date();
  date.setTime(date.getTime()+(30*24*60*60*1000));
  var cookie = [name, '=', JSON.stringify(value), '; domain=', "", '; 
  path=','/; expires='+date.toUTCString()+"';"].join('');
  document.cookie = cookie;
}

我的值是一个对象数组,如下所示:

[
  {
   count: 3
   food_id: 2
   kitchen_name: "kitchen 1"
   pic: "url"
   title: "food 1"
   total_price: 21000
   unit_price: 7000
  },
  {
   count: 5
   food_id: 7
   kitchen_name: "kitchen 2"
   pic: "url"
   title: "food 2"
   total_price: 25000
   unit_price: 5000
  },...
]

为了先更新它,我删除了这样的cookie:

function delete_cookie(name) {
  document.cookie = [name, '=; expires=Thu, 01-Jan-1970 00:00:01 GMT; path=/; 
  domain=', ""].join('');
}

然后我用新的输入调用 bake_cookie((。

让我猜猜,您的 cookie 包含非 ASCII 字符?这在所有环境中都运行良好,但在iOS上除外。解决方案是 URL 编码和 URL 解码。

另一种解决方案是使用 js-cookie,它将透明地处理这个问题。

我可以看到这不是这种情况的答案,而只是添加以防万一对将来对其他人有用。我发现iOS设备只有在设置为UTC(.toUTCString(((时才会设置"过期"日期/时间,如果没有这个,它只会将cookie设置为会话cookie。

就我而言,问题是路径设置不正确。它在桌面上工作正常,但在iOS版Chrome上不起作用。


以下方法不起作用:

path=https://example.com/path

更改为以下内容修复了此问题:

path=/path

最新更新