我有一个记住用户名功能的登录表单。他们所做的就是勾选方框,并通过以下方式保存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的经验。
答案 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
函数的对象也允许其他选项,例如设置path
,domain
和secure
。请查看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