如何在AngularJS中设置Cookie的到期date
-
我们希望将用户的授权信息存储在浏览器刷新(F5)时不应该丢失的cookie中。
-
我们希望将授权信息存储在“永久cookie”中,以防用户在login时select“记住我”checkbox。
这在使用ngCookies
模块的1.4.0版本构build中是可能的:
https://docs.angularjs.org/api/ngCookies/service/$cookies
angular.module('cookiesExample', ['ngCookies']) .controller('ExampleController', ['$cookies', function($cookies) { // Find tomorrow's date. var expireDate = new Date(); expireDate.setDate(expireDate.getDate() + 1); // Setting a cookie $cookies.put('myFavorite', 'oatmeal', {'expires': expireDate}); }]);
对于1.4:正如在这里和其他下面的评论中所指出的,从1.4开始,Angular的原生cookie支持现在提供了编辑cookies的能力:
由于38fbe3ee,$ cookie将不再公开代表当前浏览器cookie值的属性。 $ cookie不再调查浏览器对cookie的更改,不再将cookie值复制到$ cookies对象上。
这是因为投票是昂贵的,并导致$ cookie属性与实际的浏览器cookie值不正确同步的问题(轮询最初添加的原因是为了允许不同标签之间的通信,但今天有更好的方法,例如localStorage。)
$ cookies上的新API如下:
get put getObject putObject getAll remove你必须明确地使用上面的方法来访问cookie数据。 这也意味着您不能再观看$ cookie上的属性来检测浏览器cookie上发生的更改。
如果第三方库在运行时以编程方式更改cookie,通常只需要此function。 如果你依赖于这个,那么你必须编写能够对第三方库作出反应的代码,对cookies进行更改或实现自己的轮询机制。
实际的实现是通过一个$ cookiesProvider对象完成的,这个对象可以通过put
调用来传递。
对于1.3及以下版本:对于那些尽力避免加载jQuery插件的人来说,这似乎是angular度的一个很好的替代 – https://github.com/ivpusic/angular-cookie
在Angular v1.4中,你可以最终设置一些cookie的选项,比如过期。 这是一个非常简单的例子:
var now = new Date(), // this will set the expiration to 12 months exp = new Date(now.getFullYear()+1, now.getMonth(), now.getDate()); $cookies.put('someToken','blabla',{ expires: exp }); var cookie = $cookies.get('someToken'); console.log(cookie); // logs 'blabla'
如果您在运行此代码后检查您的Cookie,您将看到过期将被正确设置为名为someToken
的cookie。
作为第三个parameter passing给put
函数的对象还允许其他选项,例如设置path
, domain
和secure
。 查看文档以获得总览。
PS – 作为一个方便的提示,如果你正在升级的意见, $cookieStore
已被弃用,所以$cookies
是现在唯一的方法来处理cookie。 看文档
我想提出一个额外的例子,因为有些人知道cookies的生命周期的额外时间。 即。 他们想要设置一个cookie持续10多分钟,或多一天。
通常你已经知道cookie会在几秒钟内持续多久。
var today = new Date(); var expiresValue = new Date(today); //Set 'expires' option in 1 minute expiresValue.setMinutes(today.getMinutes() + 1); //Set 'expires' option in 2 hours expiresValue.setMinutes(today.getMinutes() + 120); //Set 'expires' option in (60 x 60) seconds = 1 hour expiresValue.setSeconds(today.getSeconds() + 3600); //Set 'expires' option in (12 x 60 x 60) = 43200 seconds = 12 hours expiresValue.setSeconds(today.getSeconds() + 43200); $cookies.putObject('myCookiesName', 'myCookiesValue', {'expires' : expiresValue});
你可以像往常一样检索它:
var myCookiesValue = $cookies.getObject('myCookiesName');
如果为空,则返回undefined。
链接;
http://www.w3schools.com/jsref/jsref_obj_date.asp
https://docs.angularjs.org/api/ngCookies/provider/ $ cookiesProvider#defaults
您可以转到angular.js脚本并更改插入cookie
searchself.cookies = function(name, value) {
那么你可以改变代码,例如添加cookie为7天
if (value === undefined) { rawDocument.cookie = escape(name) + "=;path=" + cookiePath + ";expires=Thu, 01 Jan 1970 00:00:00 GMT"; } else { if (isString(value)) { var now = new Date(); var time = now.getTime(); time += 24*60*60*1000*7; now.setTime(time); cookieLength = (rawDocument.cookie = escape(name) + '=' + escape(value) + ';path=' + cookiePath+";expires="+now.toGMTString()).length + 1
我知道这个问题有点老,已经有了一个可以接受的答案。
但仍然是一个现在的问题,我正在努力(不涉及jQuery或纯Javascript)。
所以,经过一些研究,我发现这个: https : //github.com/ivpusic/angular-cookie
其中提供了一个非常类似于$ cookieStore的“接口”。 并允许configuration到期date(值和单位)。
关于使用$ cookie或$ cookieStore的到期date的angular本机支持,“他们”承诺在1.4上的这个主题的更新,看看这个: https : //github.com/angular/angular.js/pull/10530
可以使用$ cookieStore.put(…)设置截止date,至less他们build议…
编辑:我遇到了一个“问题”,你不能混合$ cookie与angular-cookie模块。 所以,如果你设置一个cookie与ipCookie(...)
检索与ipCookie(...)
因为与$ cookie它将返回undefined
。
正如@ vincent-briglia 指出的那样 ,有一个jQuery插件可以用作解决方法,直到$cookie
服务变得可configuration为止 – 在这里查看
你可以使用https://github.com/ivpusic/angular-cookie
首先,您需要将ipCookie注入到angular度模块中。
var myApp = angular.module('myApp', ['ipCookie']);
现在,例如,如果你想从你的控制器使用它
myApp.controller('cookieController', ['$scope', 'ipCookie', function($scope, ipCookie) { // your code here }]);
创build一个cookie使用
ipCookie(key, value);
该值支持string,数字,布尔值,数组和对象,并将自动序列化到cookie中。
您还可以设置一些其他选项,例如cookie到期的天数
ipCookie(key, value, { expires: 21 });