Angular 1.4.1 $ cookies最终成为会话cookie

时间:2015-07-07 17:21:14

标签: angularjs cookies

我在设置Angular 1.4.1下的持久性cookie时遇到问题Cookie总是以会话cookie结束(根据Chrome的资源检查,以及关闭浏览器和重新打开页面的效果更明显)。

   $scope.HideSystemNotice = function() {
           // set expiry 1 yr in the future - well after System Notice expires
           var now = new Date(),
               exp = new Date(now.getFullYear()+1, now.getMonth(), now.getDate())
           $cookies.put(  'Snotice'+$scope.SystemNoticeInfo[0].snid, // cookiename
                          'dismissed',                               // value
                          { 'expires': exp }                         // expiry
                       );
           $scope.NextSystemNotice();
   };

这与StackOverflow上其他地方提供的示例基本相同(但我缺少添加到那些convos的代码:(因此是单独的问题)

正在设置Cookie - 我可以在Chrome的资源视图中看到它们。但是,它们没有到期日期(Chrome将其显示为"会话")。

在设定日期时我错过了哪些明显的花絮?感谢。

编辑...

我在设定到期日期时仍然遇到问题。我现在已经升级到Angular 1.4.7了,并尝试在.config中使用$ cookiesProvider默认值而没有任何好处

app.config(function($cookiesProvider) {
 var n = new Date();
 $cookiesProvider.defaults = {
    path: '/',
    domain: location.hostname,
    secure: true,
    expires: new Date(n.getFullYear()+1, n.getMonth(), n.getDate())
 };
});

然后在代码中进一步向下:

    $scope.HideSystemNotice = function() {
        $cookies.put('Snotice'+$scope.SystemNoticeInfo[0].snid, 'dismissed');
        $scope.NextSystemNotice();
    };

我仍然只看到正在创建会话cookie。

路径和域是正确的,但cookie没有被标记为安全,所以它就像选项(或最新的版本,默认值)没有被应用(我似乎不需要设置路径或域,无论如何,他们都会被设定。

有人可以指出任何一段代码中的错误吗?

1 个答案:

答案 0 :(得分:5)

遇到同样的问题,现在找到解决方案here。问题是,您不应该创建新对象(将{...}分配给defaults),而只需编辑defaults对象的属性,如下所示:

app.config(function($cookiesProvider) {
    var n = new Date();
    $cookiesProvider.defaults.path = '/';
    $cookiesProvider.defaults.domain = location.hostname;
    $cookiesProvider.defaults.secure = true;
    $cookiesProvider.defaults.expires = new Date(n.getFullYear()+1, n.getMonth(), n.getDate());
});