使用AngularJS在Session中存储数据

Dev*_*Dev 2 angularjs

我正在通过创建一个小应用程序来学习AngularJS.

我在成功登录时将用户信息存储在sessionStorage中.

LoginController.JS

app.controller("LoginCntrl", function ($scope, $location, angularService) {

    $scope.Login = function () {
        var UserName = $scope.UserName;
        var Password = $scope.Password;

        var getData = angularService.LoginInformation(UserName,Password);
        getData.then(function (msg) {
            if (msg.data == '') {
                alert('no data');
            } else {
                sessionStorage.UserName = msg.dataUserName;
                $location.path('/members');
            }

        }, function (error) {
            alert('error in Login');
        });
    };
});
Run Code Online (Sandbox Code Playgroud)

成功登录后,我将用户重定向到'/ memberList',并在memberlistCntrl控制器中检查sessionStorage是否为空.如果它是空的,那么我假设用户试图在没有登录的情况下访问该站点,我将用户发送回登录屏幕

memberlistCntrl中的代码

app.controller("memberlistCntrl", function ($scope, $location, allMembers) {

    if (sessionStorage.length == 0)
    {
        $location.path('/login');
        return;
    }

    $scope.MembersList = allMembers.data;

    $scope.createmember = function (path) {
        $location.path(path);
    };
});
Run Code Online (Sandbox Code Playgroud)

我的问题,

  1. 这是检查用户是否登录的正确方法吗?
  2. sessionStorage是将数据存储在"Session"中的正确对象,以便我可以通过我的所有页面或站点访问它吗?
  3. 有没有更好的方法来实现同样的目标?

nal*_*inc 5

我的问题,

  • 这是检查用户是否登录的正确方法吗?
  • sessionStorage是将数据存储在"Session"中的正确对象,以便我可以通过我的所有页面或站点访问它吗?

嗯,这取决于你的用例.sessionStorage页面会话结束时清除.只要浏览器处于打开状态,页面会话就会持续,并且会在页面重新加载和恢复后继续存在.在新选项卡或窗口中打开页面将导致启动新会话.

因此,如果您希望用户在打开另一个用户时注销tab,则可以继续使用sessionStorgae.但是,在大多数站点中情况并非如此(您是否在"另一个选项卡"中打开问题时从stackoverflow注销?).

  • 有没有更好的其他方法来实现同样的目标?

是.您可以使用localStoragecookies.Stackoverflow将此信息保存在名为的cookie中usr.

如果您使用chrome,请打开控制台(F12).

转到资源> Cookie并删除usr.刷新页面,您将被注销.

Gmail,Facebook使用类似的技术.

现在AngularJS提供$ cookies服务来获取/设置或删除cookie.

为什么原因cookies优于localStorage对象跟踪的登录状态是:cookie被传递到服务器与每个请求/响应循环,并因此可在服务器侧.如果您没有获得特定请求所需的cookie,您只需抛出状态401(未授权)消息.