【问题标题】:Detect that cookies have been deleted without page refresh检测 cookie 已被删除而不刷新页面
【发布时间】:2017-08-02 22:11:07
【问题描述】:

登录成功后我设置:

$rootScope.globals = {
    currentUser: {
        username: username,
        token: token
    }
};

var cookieExp = new Date();
cookieExp.setHours(cookieExp.getHours() + 1);

$cookies.putObject('globals', $rootScope.globals, { expires: cookieExp });

当我在 Mozilla Firefox 中“清除所有历史记录”时,用户令牌仍然存在,并且我可以在受限内容中导航,直到我明确刷新页面。有什么方法可以检测到凭据已被删除而不刷新页面?

【问题讨论】:

  • 您真的需要处理这种情况吗?清除历史记录的用户不会关闭您的应用程序的标签吗?但你可以做的是定义一个间隔并检查 cookie 值的变化。
  • 在我的情况下,没有必要处理但仍然很好奇。

标签: javascript angularjs cookies


【解决方案1】:

为了与 cookie 同步,globals 应该在每次使用时调用 $cookies,例如成为单一的事实来源:

app.service('globals', function ($cookies) {
  this.get = function (key) {
    return $cookies.getObject('globals');
  };
  this.set = function (key, obj) {
    var cookieExp = new Date();
    cookieExp.setHours(cookieExp.getHours() + 1);
    $cookies.putObject('globals', obj, { expires: cookieExp });
  };
});

由于 cookie 请求可能效率低下,服务可以选择提供过期缓存。

使用根作用域作为全局变量作用域is antipattern

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-09
    • 1970-01-01
    • 1970-01-01
    • 2015-08-02
    • 2013-02-25
    • 1970-01-01
    相关资源
    最近更新 更多