【问题标题】:Angular $cookieStore not retaining updated cookie on refreshAngular $cookieStore 在刷新时不保留更新的 cookie
【发布时间】:2015-07-21 23:49:55
【问题描述】:

我遇到了 $cookieStore 在更新后保留 cookie 值的问题。下面是处理 cookie 的 UserService 的两个方法:

var getCurrentUser = function () {
    return $cookieStore.get('currentUser');
};

var updateCurrentUser = function () {
    return $http.get(baseUrl + 'api/session').then(function (response) {
        $cookieStore.put('currentUser', response.data);
        $rootScope.$broadcast('currentUser', response.data);
    }, function (response) {
        $cookieStore.remove('currentUser');
        $rootScope.$broadcast('currentUser', null);
    });
};

在整个应用程序中,执行会影响当前用户元数据的操作后,我调用UserService.updateCurrentUser() 从服务器检索最新的用户数据并更新该 cookie。然后,在显示用户数据的地方,我有以下代码将更新该特定控制器中的用户模型:

$scope.$on('currentUser', function (event, data) {
    $scope.user = data;
});

当我单步执行代码时,一切似乎都正常工作。在$cookieStore.put('currentUser', response.data); 行运行后,可以通过检查$cookieStore.get('currentUser') 来确认更新的值。但是,当我使用浏览器工具检查实际 cookie 时,cookie 值不会更新。我不确定浏览器工具是否需要刷新才能显示新数据。但是当我刷新页面时,更新后的 cookie 值也不见了。怎么回事?

提前致谢。

【问题讨论】:

  • 查看 put(...) 的文档 - 第三个参数带有其他选项,包括 cookie 何时到期。否则它将在刷新时过期。此外,该服务现在称为$cookies,我不确定您使用的是哪个版本的角度,但我认为它足够相似,可以从文档中工作:docs.angularjs.org/api/ngCookies/service/$cookies
  • @DavidSpence:谢谢!我不得不用 1.4.0 替换 angular 1.3.15 以获得该文档中描述的 cookie 功能。我现在可以设置过期,虽然当前的问题是将 cookie 大小减少到 4kb 以下...
  • 甜蜜!为甜蜜、甜蜜的互联网积分添加答案。

标签: angularjs cookies angular-cookies


【解决方案1】:

查看使用$cookie 服务添加 cookie 的文档:

put(key, value, [options]);

第三个参数允许附加选项:

  • 路径(字符串)
  • 域(字符串)
  • 到期(日期)
  • 安全(布尔)

你应该设置“expires”来定义cookie什么时候过期,否则cookie会在你刷新或离开网站时过期。

$cookies.put("id", 1, {
    expires: new Date(2016, 1, 1)
});

该服务现在也称为$cookies。从 Angular 1.4 开始,您现在可以设置过期时间。在那之前是不可能的。

http://docs.angularjs.org/api/ngCookies/service/$cookies

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多