我在设置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没有被标记为安全,所以它就像选项(或最新的版本,默认值)没有被应用(我似乎不需要设置路径或域,无论如何,他们都会被设定。
有人可以指出任何一段代码中的错误吗?
答案 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());
});