[英]Angular.js and PHP: Keeping login information when page refresh
用戶可以使用login.html表單,該表單使用一個提交按鈕,該按鈕調用一個有角度的post方法,並將用戶名/電子郵件和密碼發送到用於存儲MySQL表的login.php。 用戶的其余信息從表中收集並存儲在$ _SESSION中,該會話經過json編碼並發送回angular.js。
角度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}
密碼永遠不會返回,我在寫問題時犯了一個錯誤,對不起。
為什么要將密碼存儲在瀏覽器中? 該應用程序不需要它。 用戶不需要它。 服務器不需要它。 這只是一個沒有漏洞的安全漏洞。
用戶登錄時,請勿將數據庫記錄中的所有信息都發回。 僅發回應用需要的功能。 其余的可以保留在Session中。
至於您有關刷新的問題。 會話或本地存儲是必經之路。 在服務器端,將last_seen
時間戳存儲在$_SESSION
。 每次用戶發出新請求時刷新。 如果有一段時間沒有看到用戶,則不會刷新。 因此,您要做的就是檢查$_SESSION['last_seen']
是否在最近的20分鍾之內或其他時間。 如果session_destroy()
了,請調用session_destroy()
並要求重新登錄。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.