Angular.js和PHP:在页面刷新时保持登录信息

时间:2016-07-26 12:08:56

标签: javascript php angularjs json

用户可以使用login.html表单,该表单使用提交按钮调用角度post方法,并将用户名/电子邮件和密码发送到login.php,其中存储了MySQL表。用户信息的其余部分从表中收集并存储在$ _SESSION中,会话采用json编码并发送回angular.js。

Angular AuthController

app.controller("AuthController", function($scope, $http, $rootScope, $window) {

$scope.ctlr = 'Auth';

$scope.ngPOSTLogin = function() {
    var data = {
        UserName: $scope.UserName,
        Password: $scope.Password
    }
    $http.post('server/auth/login.php', JSON.stringify(data))
        .then(function(result) {
            $rootScope.user = result.data;
            //$window.sessionStorage['$rootScope.user'] = JSON.stringify($rootScope.user);
        });
};
});

现在,如果用户刷新页面,$ rootScope也会刷新,这意味着登录数据会丢失。使用$ window.sessionStorage保存整个JSON对象(带有密码),表明它应该加密。 问题很简单,即使重新加载页面,我如何保留用户的登录信息。我不想使用某人的github项目(例如ngStorage)。 我的整个项目 - https://github.com/AquaSolid/RAMA_Angular_PHP

修改

这是login.php返回的示例

{"ID":"3","UserName":"TommyGun","FirstName":"Tommy","LastName":"Larson","Email":"tommy.larson@gmail.com","Logged":true}

密码永远不会被退回,我在写这个问题时犯了一个错误,抱歉..

1 个答案:

答案 0 :(得分:2)

为什么要在浏览器中存储密码?该应用程序不需要它。用户不需要它。服务器不需要它。它只是一个没有上升空间的安全漏洞。

当用户登录时,不要发回DB记录中的所有信息。只发回应用程序需要运行的内容。其余的可以保留在会话中。

至于你关于提神的问题。会话或本地存储是可行的方法。在服务器端,将last_seen时间戳存储在$_SESSION中。每次用户发出新请求时刷新它。如果用户暂时没有看到,则不会刷新。所以你要做的就是检查$_SESSION['last_seen']是否在最近20分钟内或其他什么。如果距离过去太远,请致电session_destroy()并要求重新登录。