【问题标题】:What would prevent AngularJS $cookies from writing a cookie?什么会阻止 AngularJS $cookies 写入 cookie?
【发布时间】:2016-07-14 00:41:21
【问题描述】:

我正在尝试使用 AngularJS v1.5.x $cookies 服务编写一个简单的 cookie。依赖项都是正确的,因为我可以读取 cookie。但是,写入和编辑都不起作用。

例如:

var blah = $cookies.get('mysite_auth');
console.log('old: ' + blah);

$cookies.put('mysite_auth', 'blech');

blah = $cookies.get('mysite_auth');
console.log('new: ' + blah);

...产生以下输出:

旧:ZmVhZDE ... =
新:ZmVhZDE ... =

不会抛出任何错误。尝试写入新 cookie 时也会发生同样的情况:

$cookies.put('someCookie', 'yup');

我可以像这样在我的控制器中写一个 cookie:

document.cookie = 'TEST=TESTVALUE';

这可能是什么原因?

【问题讨论】:

  • 在旧版本的 IE 上可能会失败。你在什么浏览器上试试这个?
  • Chrome 最新稳定版。
  • 你试过 $cookieStore.put 来放值吗?
  • 没有。我的理解是 $cookieStore 已被弃用。
  • 我在 GitHub 上发现了这个问题,提到 $cookie.put 异步工作。您可能在实际写入 cookie 之前就已阅读它。您可以尝试设置超时以查看是否是这种情况。 github.com/angular/angular.js/issues/6411

标签: javascript angularjs cookies angular-cookies


【解决方案1】:

事实证明,Angular $cookies 正在写入 cookie,但我们遇到了域/路径问题。因为我们的 Angular 应用程序位于后端应用程序目录之外,所以页面 URL 与服务器路径不匹配。如果我访问了实际路径,而页面未正确加载,则 cookie 存在。

我们解决了这个域/路径配置的问题:

$cookies.put('myCookie', true, {
    domain: '.mydomain.com',
    path: currentUrl,
    expires: exp
});

【讨论】:

    【解决方案2】:

    您是否尝试过为您的 cookie 设置过期时间?

    例如

    var dDate = new $window.Date(),
    var dExp = new $window.Date(dDate.getFullYear(), dDate.getMonth()+1, dDate.getDate());
    
    $cookies.put('someCookie','yup', {expires: dExp});
    
    var cCookie = $cookies.get('someCookie');
    console.log(cCookie);
    

    刚刚找到一个可能有帮助的 cookie 线程:How to set expiration date for cookie in AngularJS

    【讨论】:

    • 我有。我将其删除以简化故障排除。该属性不是必需的。
    猜你喜欢
    • 2013-07-19
    • 1970-01-01
    • 2021-01-29
    • 2014-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-16
    • 2012-12-21
    相关资源
    最近更新 更多