我正在通过创建一个小应用程序来学习AngularJS.
我在成功登录时将用户信息存储在sessionStorage中.
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是否为空.如果它是空的,那么我假设用户试图在没有登录的情况下访问该站点,我将用户发送回登录屏幕
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)
我的问题,
我的问题,
- 这是检查用户是否登录的正确方法吗?
- sessionStorage是将数据存储在"Session"中的正确对象,以便我可以通过我的所有页面或站点访问它吗?
嗯,这取决于你的用例.sessionStorage页面会话结束时清除.只要浏览器处于打开状态,页面会话就会持续,并且会在页面重新加载和恢复后继续存在.在新选项卡或窗口中打开页面将导致启动新会话.
因此,如果您希望用户在打开另一个用户时注销tab,则可以继续使用sessionStorgae.但是,在大多数站点中情况并非如此(您是否在"另一个选项卡"中打开问题时从stackoverflow注销?).
- 有没有
更好的其他方法来实现同样的目标?
是.您可以使用localStorage或cookies.Stackoverflow将此信息保存在名为的cookie中usr.
如果您使用chrome,请打开控制台(F12).
转到资源> Cookie并删除usr.刷新页面,您将被注销.
Gmail,Facebook使用类似的技术.
现在AngularJS提供$ cookies服务来获取/设置或删除cookie.
为什么原因cookies优于localStorage对象跟踪的登录状态是:cookie被传递到服务器与每个请求/响应循环,并因此可在服务器侧.如果您没有获得特定请求所需的cookie,您只需抛出状态401(未授权)消息.