Session 如何在多页应用程序中保持会话?

Session 如何在多页应用程序中保持会话?,session,angularjs,Session,Angularjs,我有一个带有用户身份验证的单页应用程序,在那里共享会话信息没有问题 然而,我有一部分网站是静态页面,我只想包括会话信息(登录用户,或登录表单)。如何在两个应用程序之间共享会话信息?我建议创建一个服务来包装localStorage或其他API来存储持久数据。是一个使用localStorage实现的示例 这个实现是同步的,但是如果我像使用websql或者甚至使用server db,那么我会重构它以用于返回存储对象 控制器 var demo = angular.module('demo', [ 'ap

我有一个带有用户身份验证的单页应用程序,在那里共享会话信息没有问题


然而,我有一部分网站是静态页面,我只想包括会话信息(登录用户,或登录表单)。如何在两个应用程序之间共享会话信息?

我建议创建一个服务来包装
localStorage
或其他API来存储持久数据。是一个使用
localStorage
实现的示例

这个实现是同步的,但是如果我像使用
websql
或者甚至使用server db,那么我会重构它以用于返回存储对象

控制器

var demo = angular.module('demo', [ 'appStorage' ]);

demo.controller('AppStorageController', [ '$scope', 'appStorage',
    function($scope, appStorage) {
      appStorage('MyAppStorage', 'myAppStorage', $scope);
    } ]);
HTML

<div ng-controller="AppStorageController">
  <p>Local Storage: {{myAppStorage}}</p>
  <p>
    Username: <input type="text" ng-model="myAppStorage.username"></input>
  </p>
  <p>
    Remember me: <input type="checkbox"
      ng-model="myAppStorage.rememberMe"></input>
  </p>
</div>

如何使用此
appStorage
服务清理属性或存储应用程序。例如,如果我创建了一个
FooStorage
应用程序,并使用
appStorage('FooStorage','bar',$scope')在
$scope
下放置了一个
bar
属性
那么我该怎么做才能只清理
属性,如果我需要清理整个
FooStorage
?@skip我会向api添加一个removeApp方法,该方法将通过应用程序的名称调用localStorage.removeItem在本例中是FooStorage。如果要删除属性,请添加一个删除方法,该方法将删除映射中的属性,然后将该值重新保存到localStorage,应该调用
fooStore.clear()未清除存储在
fooStore
中的所有数据?即使在调用
fooStore.clear()后重新加载页面,我也会获取存储的数据。如何清除
fooStore
中的所有数据?谢谢
angular.module('appStorage', []).factory('appStorage',
    [ '$window', function($window) {
      var appStorages = {};
      var api = undefined;

      if ($window.localStorage) {
        api = {
          set : function(name, value) {
            $window.localStorage.setItem(name, JSON.stringify(value));
          },
          get : function(name) {
            var str = $window.localStorage.getItem(name);
            var val = {};
            try {
              val = str ? JSON.parse(str) : {};
            }
            catch (e) {
              console.log('Parse error for localStorage ' + name);
            }
            return val;
          },
          clear : function() {
            $window.localStorage.clear();
          }
        };
      }
      // possibly support other

      if (!api) {
        throw new Error('Could not find suitable storage');
      }

      return function(appName, property, scope) {
        if (appName === undefined) {
          throw new Error('appName is required');
        }

        var appStorage = appStorages[appName];

        var update = function() {
          api.set(appName, appStorage);
        };

        var clear = function() {
          api.clear(appName);
        };

        if (!appStorage) {
          appStorage = api.get(appName);
          appStorages[appName] = appStorage;
          update();
        }

        var bind = function(property, scope) {
          scope[property] = appStorage;
          scope.$watch(property, function() {
            update();
          }, true);
        };

        if (property !== undefined && scope !== undefined) {
          bind(property, scope);
        }

        return {
          get : function(name) {
            return appStorage[name];
          },
          set : function(name, value) {
            appStorage[name] = value;
            update();
          },
          clear : clear
        };
      };
    } ]);