我们希望将用户的授权信息存储在 cookie 中,该信息在浏览器刷新 (F5) 时不应丢失。
我们希望在“永久cookie”中存储授权信息,以防用户在登录时选择了“记住我”复选框。
如何在 AngularJS 中设置 cookie 的过期日期
这在使用ngCookies
module的 1.4.0 构建中是可能的:
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 支持现在提供了编辑 cookie 的能力:
由于 38fbe3ee,$cookies 将不再公开表示当前浏览器 cookie 值的属性。$cookies 不再轮询浏览器对 cookie 的更改,也不再将 cookie 值复制到 $cookies 对象上。
这是因为轮询代价高昂并导致 $cookies 属性无法与实际浏览器 cookie 值正确同步的问题(最初添加轮询的原因是为了允许不同选项卡之间的通信,但今天有更好的方法来做到这一点,例如 localStorage。)
$cookies 上的新 API 如下:
get put getObject putObject getAll remove 您必须明确使用上述方法才能访问 cookie 数据。这也意味着您无法再通过查看 $cookies 的属性来检测浏览器 cookie 上发生的更改。
通常仅当第 3 方库在运行时以编程方式更改 cookie 时才需要此功能。如果您依赖于此,那么您必须编写可以对 3rd 方库对 cookie 进行更改做出react的代码,或者实现您自己的轮询机制。
实际的实现是通过$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,您将看到过期时间将正确设置为名为 的 cookie someToken
。
作为第三PARAM到传递的对象put
上述功能允许其他选项,以及,诸如设置path
,domain
和secure
。检查文档以获得概述。
PS - 附带说明,如果您要升级$cookieStore
已弃用的 Mind,那么$cookies
现在是处理 cookie 的唯一方法。查看文档
我想提供一个额外的例子,因为有些人知道 cookie 生命周期的额外持续时间。IE。他们想将 cookie 设置为多持续 10 分钟,或多 1 天。
通常,您已经知道 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
搜索,self.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