AngularJS $ cookies不会持久存在

时间:2014-07-11 16:29:19

标签: javascript angularjs cookies

我有一个记住用户名功能的登录表单。他们所做的就是勾选方框,并通过以下方式保存cookie:

$scope.toggleCookie = function()
{
    //-- $scope.remember is the model for the checkbox
    $cookieStore.put('remember', $scope.remember);
    if (!$scope.remember) $cookieStore.remove('email');
}

当用户返回登录页面时,首先我检查remember cookie:

$scope.remember = ($cookieStore.get('remember') == null || $cookieStore.get('remember') == false) ? false : true;

然后我检查email cookie中是否有值:

$scope.email = ($cookieStore.get('email') != null) ? $cookieStore.get('email') : '';

现在以上所有工作正常,我可以登录查看,注销,我可以在输入字段中看到我的用户名。如果我取消选中它,登录并注销,用户名就会消失。

我也可以在chrome dev工具的resources-> cookies标签中看到这种情况。

我可以刷新页面,但仍然会在检查时使用用户名。

我的问题是当我关闭chrome时,重新打开它,所有的Cookie数据都消失了。为什么是这样?我没有太多使用cookies的经验。

3 个答案:

答案 0 :(得分:21)

在Angular v1.4中,您可以最终为Cookie设置一些选项。这是一个非常简单的例子:

var now = new $window.Date(),
    // this will set the expiration to 6 months
    exp = new $window.Date(now.getFullYear(), now.getMonth()+6, now.getDate());

$cookies.put('yourCookie','blabla',{
  expires: exp
});

var cookie = $cookies.get('yourCookie');
console.log(cookie); // logs 'blabla'

如果您在运行此代码后检查了Cookie,则会看到过期将正确设置为名为yourCookie的Cookie。

作为第三个参数传递给上述put函数的对象也允许其他选项,例如设置pathdomainsecure。请查看the docs以获取概述。

答案 1 :(得分:3)

要使cookie在浏览器会话上保持持久性,应设置过期日期。不幸的是,angularjs $ cookie服务似乎不支持这一点。请参阅此帖子:AngularJS - How to set expiration date for cookie in AngularJS

答案 2 :(得分:3)

所以它似乎是导致问题的到期日。从AngularJS 1.2.19开始,您无法通过$cookie$cookieStore设置到期日期。

为了解决这个问题,我使用了本地存储。我使用此模块可以轻松访问本地存储:https://github.com/grevory/angular-local-storage

改变是非常轻松的。我将$cookieStore.get('remember');更改为localStorageService.get('remember');,以便您可以看到它们共享方法名称。它不是put,而是add