如何在AngularJS中设置cookie的到期日期

时间:2012-09-27 14:51:21

标签: javascript cookies angularjs session-cookies angular-cookies

  1. 我们希望将用户的授权信息存储在cookie中,浏览器刷新(F5)时不应丢失。

  2. 我们希望将授权信息存储在“永久cookie”中,以防用户在登录时选择“记住我”复选框。

8 个答案:

答案 0 :(得分:45)

使用ngCookies模块在​​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 :(得分:32)

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上。

     

通常只有第三方库才需要此功能   以编程方式在运行时更改cookie。如果你依赖于此   那么你必须编写可以对第三方做出反应的代码   库对cookie进行更改或实施自己的轮询   机构。

实际的实现是通过$cookiesProvider对象完成的,可以通过put调用传递。

1.3及以下: 对于那些尽力避免加载jQuery插件的人来说,这似乎是角度的一个很好的替代 - https://github.com/ivpusic/angular-cookie

答案 2 :(得分:26)

在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。

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

PS - 作为旁注,如果您正在升级,$cookieStore已被弃用,那么$cookies现在是处理Cookie的唯一方法。见docs

答案 3 :(得分:12)

我想提供一个额外的例子,因为有些人知道cookie生命周期的额外持续时间。即。他们想要将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#默认

答案 4 :(得分:3)

您可以转到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

答案 5 :(得分:2)

我知道这个问题有点陈旧,已经有了一个公认的答案。

但仍然存在一个我正在努力解决的问题(不是关于jQuery或纯Javascript)。

所以,经过一些研究后我发现了这个: https://github.com/ivpusic/angular-cookie

它提供了一个"界面"与$ cookieStore非常相似。并允许配置到期日期(值和单位)。

关于使用$ cookie或$ cookieStore的过期日期的角度原生支持,"他们"承诺在1.4上对此主题进行更新,请查看:https://github.com/angular/angular.js/pull/10530

可以用$ cookieStore.put(...)设置到期日期,至少他们建议......

编辑:我遇到了问题"你不能将$ cookies与angular-cookie模块混合在一起。因此,如果您使用ipCookie(...)设置Cookie并使用ipCookie(...)检索它,因为使用$ cookie它将返回undefined

答案 6 :(得分:1)

作为@ vincent-briglia pointed out,有一个jQuery插件可以在$cookie服务变得可配置之前用作解决方法 - check it out here

答案 7 :(得分:0)

您可以使用https://github.com/ivpusic/angular-cookie

首先,您需要将ipCookie注入角度模块。

var myApp = angular.module('myApp', ['ipCookie']);

现在,例如,如果您想从控制器中使用它

myApp.controller('cookieController', ['$scope', 'ipCookie', function($scope, ipCookie) {
  // your code here
}]);

创建cookie使用

ipCookie(key, value);

该值支持字符串,数字,布尔值,数组和对象,并将自动序列化到cookie中。

您还可以设置一些其他选项,例如Cookie过期的天数

ipCookie(key, value, { expires: 21 });