$cookies 与 angularjs 1.4 到期日期

Posted

技术标签:

【中文标题】$cookies 与 angularjs 1.4 到期日期【英文标题】:$cookies with angularjs 1.4 expiration date 【发布时间】:2015-11-03 06:14:36 【问题描述】:

如何使用 angularjs 1.4 设置带有过期日期的 cookie。文档说要使用

expires - string|Date - String of the form "Wdy, DD Mon YYYY HH:MM:SS GMT" or a Date object indicating the exact date/time this cookie will expire.

但它不起作用。我的萤火虫仅将到期日期显示为会话。

HTML

<div ng-app="cookieApp" ng-controller="cookieCtrl">
    <button ng-click="setCookie()">Set Cookie</button>
     <button ng-click="getCookie()">Get Cookie</button>
</div>

Javascript

    var app=angular.module("cookieApp",['ngCookies']);
app.controller("cookieCtrl",function($scope, $cookies)
    $scope.setCookie = function()
    console.log("setCookie");
        var now = new Date();
        now.setDate(now.getDate() + 7);
          $cookies.put("tech","angularjs",expiry:now);
     
     $scope.getCookie = function()
          alert( $cookies.get("tech"));
    
);

我尝试设置 jsFiddle,但无法保存。我的警报显示未定义。

【问题讨论】:

【参考方案1】:

在调试类似的东西时遇到了问题。

主要错误是由于您的代码中的expiry vs expires

var app = angular.module("cookieApp", ["ngCookies"]);
app.controller("cookieCtrl", function ($scope, $cookies) 
    $scope.setCookie = function () 
        console.log("setCookie");

        var now = new Date();
        now.setDate(now.getDate() + 7);

        $cookies.put("tech", "angularjs", 
            expires: now
        );
    
    $scope.getCookie = function () 
        alert($cookies.get("tech"));
    
);

jsfiddle:http://jsfiddle.net/ucskyv67/

注意 angular.jsangular-cookies.js 的两个依赖项 - 在侧栏中链接 - 我已链接到 google cdn 上的 1.4.2。

【讨论】:

【参考方案2】:

使用这个经过修改的 angular-cookie 库。 在此您可以设置带有过期对象和路径的 cookie

https://github.com/babarxm/angular-cookies-fixed/tree/v1.5.6

例子:

$cookies.put("token", 
    expires : new Date(),
    path : "/somepath"
);

设置日期对象的小时、分钟、天数以设置 cookie 过期。 默认为会话。

(抱歉英语不好:)

【讨论】:

感谢您的回答。但我已经不在 1.x 版本中,正在试用带有类型脚本的 2.x 版本。我会及时通知您并感谢您的回复。【参考方案3】:

我遇到了 Firefox 不保存 cookie 的问题。根据文档https://docs.angularjs.org/api/ngCookies/service/$cookies,正确的 cookie 调用应该是:

$cookies.put("tech","angularjs",[expires:now]);

注意“expires vs expiry 和 [] 包装参数。

【讨论】:

不需要方括号。

以上是关于$cookies 与 angularjs 1.4 到期日期的主要内容,如果未能解决你的问题,请参考以下文章

从 angularJS 1.3-beta 迁移到 1.4 后,$http 帖子无法正常工作

AngularJS $ cookies 1.6.9无效

AngularJS:$cookies.remove 不是函数

无法使用 AngularJS 的 $cookies 删除 cookie

使用 AngularJS 创建 cookie

Angularjs总结$ cookie和$rootscope