【问题标题】:How to detect cookie expiration in AngularJS?如何检测AngularJS中的cookie过期?
【发布时间】:2017-12-02 13:49:25
【问题描述】:

似乎$watch 无法使用 cookie 过期。这是我尝试过的代码

 $scope.$watch(function(){
        return $cookies.get('cookies')
    },function(newVal,oldVal){
        if(!newVal){
            console.log('ok')

        }
    })

我可以通过$interval 进行检查。但我不想每 2s 或 5s 调用一次摘要循环。

【问题讨论】:

  • $scope.watch 会比every 2s or 5s 更频繁地观看 cookie
  • @harishr 是的,但是当我删除 cookie 或 cookie 过期时它似乎不起作用
  • 只有在有摘要循环时才会触发监视函数。如果没有摘要循环,watch函数将不会执行,也不会检测cookie的过期时间。使用 $interval 保证在指定的时间间隔启动一个摘要循环。

标签: angularjs cookies


【解决方案1】:

不幸的是,it is not possible to read the cookie expiration time in JS 所以我第一个迭代它们并在其到期日期执行操作的想法是不可能的。

如果您不想在每次“cookie 检查”时都开始摘要,您可以将$interval 的第四个参数设置为false 来禁用它。见$interval docs

示例代码:

.run(function($cookies, $interval) {
  var previouslyAvailableCookies = Object.keys($cookies.getAll());
  var watchCookieChanges = function() {
     var availableCookies = Object.keys($cookies.getAll());
     var expiredCookies = previouslyAvailableCookies.filter(function(cookieName) { return availableCookies.indexOf(cookieName) < 0; });
     var newCookies = availableCookies.filter(function(cookieName) { return previouslyAvailableCookies.indexOf(cookieName) < 0; });
     if (expiredCookies.length || newCookies.length) {
       document.writeln("<p>New cookies: " + newCookies 
                      + "<br>Expired cookies: " + expiredCookies + '</p>');
     }
    previouslyAvailableCookies = availableCookies;
  };
  $interval(watchCookieChanges, 3000, 0, false);
})

还有一个codepen

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-29
    • 2012-09-19
    • 2013-07-25
    • 2014-06-23
    • 1970-01-01
    • 1970-01-01
    • 2017-08-23
    • 1970-01-01
    相关资源
    最近更新 更多