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

Angular.js and PHP: Keeping login information when page refresh

本文关键字:保留 登录 信息 刷新 js PHP Angular      更新时间:2023-09-26

用户可以使用login.html表单,该表单使用一个提交按钮,该按钮调用一个angular post方法,并将用户名/电子邮件和密码发送到存储MySQL表的login.php。用户的其余信息从表中收集并存储在$_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}

密码永远不会返回,我在写问题时犯了一个错误,对不起。。

为什么要在浏览器中存储密码?应用程序不需要。用户不需要。服务器不需要。这只是一个没有好处的安全漏洞。

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

至于你关于提神的问题。会话或本地存储是最好的选择。在服务器端,将last_seen时间戳存储在$_SESSION中。每次用户提出新请求时都刷新它。如果用户有一段时间没有被看到,它将不会被刷新。因此,您所要做的就是检查$_SESSION['last_seen']是否在最后20分钟内或其他时间内。如果它已经过时,请调用session_destroy()并要求新登录。