【问题标题】:Angular JS - set $cookies domain wide failedAngular JS - 在域范围内设置 $cookies 失败
【发布时间】:2015-10-21 13:06:01
【问题描述】:

我在 angularjs 应用程序中设置 cookie 时遇到了麻烦。情况是我想设置一个站点范围内可用的 cookie,但我不知道如何使用 angular js 默认 $cookies 对象设置 cookie 的所有参数。

例如,通常在 Javascript 中我会写这个

var exp = new Date();
exp.setTime(exp.getTime()+(24*60*60*1000)); // expires after a day
document.cookie = "myCookies=yes;expires="+exp.toGMTString()+ ";domain=.example.com;path=/";

但由于 DOM 对象无法轻松加载到我的应用程序中,所以我必须使用 $cookies (angular-cookies.js)。新代码是:

angular.module('MyApp')
    .controller('MyCtrl', function ($scope, $filter, Slug,PUBLIC_ROUTES, $cookies) {
        var myCookies = $cookies['mycookies'];
        if (typeof myCookies == 'undefined' || typeof myCookies == undefined) {
            $cookies['mycookies'] = "yes";
        }
    });

但是我无法设置到期日期、路径和域,因为这些不适用于 $cookies。

我该怎么办?

【问题讨论】:

标签: javascript angularjs cookies


【解决方案1】:

如果您使用 Angular 1.4+,只需在主应用模块的配置部分设置 $cookiesProvider.defaults。示例:

angular.module('my-app', [ngCookies])
.config(['$cookiesProvider', function($cookiesProvider) {
    // Set $cookies defaults
    $cookiesProvider.defaults.path = '/';
    $cookiesProvider.defaults.secure = true;
    $cookiesProvider.defaults.expires = exp_date;
    $cookiesProvider.defaults.domain = my_domain;
}]);

只是不要犯同样的错误,我最初用这样的新对象分配默认值:

$cookiesProvider.defaults = {path: '/', secure: true};

这会破坏对象的引用,并且不会再覆盖默认值。

【讨论】:

    【解决方案2】:

    $cookies 允许您使用来自$cookiesProvider 的选项来put(key, value, [options]),包括expires 属性。

    你也可以看看How to set expiration date for cookie in AngularJS

    【讨论】:

      猜你喜欢
      • 2013-07-28
      • 2014-06-07
      • 2013-12-26
      • 1970-01-01
      • 2021-09-02
      • 1970-01-01
      • 2012-01-14
      • 1970-01-01
      • 2018-05-24
      相关资源
      最近更新 更多