Angular.js和PHP:刷新页面时保留登录信息
Angular.js and PHP: Keeping login information when page refresh
用户可以使用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()
并要求新登录。
- 分派点击事件并保留击键修饰符
- 如何使用jquery强制一个单词更改大小写等以保留品牌
- 使用acess代币登录Facebook,并通过网络应用程序离线发布
- 提交后保留下拉选择的值
- 尝试使用Phonegap进行php登录
- 刷新后保留对网页的更改
- 在mvc应用程序中,在回发时保留最初隐藏的文本框的隐藏或可见状态
- Facebook登录按钮没有'不能在Firefox上工作
- Flash Uploadify在调用我的MVC控制器时没有保留会话/授权
- 使用javascript反复检查用户在facebook上的登录状态
- 当设置addFromAutocompleteOnly时,剩余文本将保留在输入字段中
- 使用递归属性迭代保留属性结构
- Firebase-登录时获取url
- AngularJS:转发到登录页面进行身份验证,保留路由作为GET参数
- 通过 CAS 登录保留 URL 片段
- AngularJS:页面刷新时保留登录信息
- Javascript在登录失败时保留表单
- Facebook API - OAUTH登录屏幕保留用户的电子邮件地址
- Angular.js和PHP:刷新页面时保留登录信息
- 页面刷新后,Gapi 登录状态不会保留在用户浏览器中