Angularjs中的localStorage在选项卡之间共享

localStorage in Angularjs share between tabs

本文关键字:之间 共享 选项 中的 localStorage Angularjs      更新时间:2023-09-26

当前我使用$window.sessionStorage.token,因此如果用户刷新页面,它将在不丢失任何数据的情况下维护会话。但现在我想在不同的选项卡中打开,但它要求我再次登录。经过一些研究,我发现我必须使用localStorage。

问题问题-

1) 如何使用本地存储在选项卡之间共享会话?2) 这个问题还有别的解决办法吗?

我已经查看了大部分的帖子,并没有给出很好的理解。如果有人能用基本的例子来帮助理解这一点,那将是非常好的,也将不胜感激。

您需要一个服务来注入每个控制器或$rootScope以实现统一访问。我正在用一个棱角分明的应用程序做同样的事情。这是我的版本,让你开始。您在代码中看到的Authutils服务是Stanford Javascript Crypto Library的实现,位于http://bitwiseshiftleft.github.io/sjcl/为存储的资源添加一层安全性,因为使用浏览器调试工具可以很容易地看到这些资源:

angular.module('myApp').service('Dataservice', [
'Authutils',
function Dataservice(Authutils) {
    var _test = [1, 2, 3];
    var hasStorage = function() {
        if (Modernizr.localstorage) {
            return true;
        } else {
            return false;
        }
    };
    var _get = function(key, make, init_data) {
        var out = [];
        var create = typeof make !== "undefined" ? make : false;
        var data = typeof init_data !== "undefined" ? init_data : false;
        if (hasStorage()) {
            var sval = localStorage.getItem(key);
            if (!!sval) {
                try {
                    sval = Authutils.decrypt(sval);
                    out = JSON.parse(sval);
                } catch (e) {
                }
            } else {
                if (create) {
                    if (data) {
                        data = Authutils.encrypt(data);
                        _set(key, data);
                    } else {
                        _set(key, []);
                    }
                }
            }
        }
        return out;
    };
    var _set = function(key, value) {
        if (hasStorage()) {
            var subject = JSON.stringify(value);
            localStorage.setItem(key, Authutils.encrypt(subject));
            return true;
        }
        return false;
    };
    var _drop = function(key) {
        if (hasStorage()) {
            localStorage.removeItem(key);
            return true;
        }
        return false;
    };
    var _nuke = function() {
        if (hasStorage()) {
            localStorage.clear();
            return true;
        }
        return false;
    };
    var _push = function(key, value) {
        var out = [];
        if (hasStorage()) {
            var current = JSON.parse(localStorage.getItem(key));
            if (!!current) {
                current.push(value);
                _set(key, current);
            }
        }
        return out;
    };
    return {
        get: function(key, make, init_data) {
            return _get(key, make, init_data);
        },
        set: function(key, value) {
            _set(key, value);
        },
        push: function(key, value) {
            _push(key, value);
        },
        trash: function(key) {
            _cut(key);
        },
        nuke: function() {
            _nuke();
        },
        test: function() {
            return _test;
        }
    };
  }
]);