使用Angularjs在PHP上维护会话
问题描述:
代码运行良好,但是当我刷新页面服务PHP时,我不知道如何但已经登录。虽然我之前登录过。使用Angularjs在PHP上维护会话
app.js
web_app.controller("form_dang_nhap_gio_hang", function($scope, $http){
$http({
method: 'GET',
url: 'services/api_kiem_tra_dang_nhap.php'
}).success(function(data, status, headers, config){
$scope.thong_tin_dang_nhap = data;
}).error(function(data, status, headers, config){
alert("lỗi không gửi được!");
});
$scope.btn_dang_nhap_tai_khoan = function(){
data_chuyen_di = '{ "data" : {"ten_dang_nhap":"'+$scope.ten_dang_nhap+'","mat_khau":"'+$scope.mat_khau+'"}}';
//alert(data_chuyen_di);
$http({
url: 'services/api_kiem_tra_dang_nhap.php',
method: "POST",
data: data_chuyen_di,
headers: {'Content-Type': 'application/x-www-form-urlencoded'}
}).success(function (data, status, headers, config) {
//alert(data);
if(data.thong_bao_loi != "")
{
alert(data.thong_bao_loi);
}
else
{
$scope.thong_tin_dang_nhap = data;
$("#modal-id").modal('hide');
}
//$scope.persons = data; // assign $scope.persons here as promise is resolved here
}).error(function (data, status, headers, config) {
alert("lỗi không gửi được!");
});
}
});
PHP服务,当它获得发布数据时添加会话,如果它之前没有会话并且登录信息是正确的话。如果它已经登录,那么它将返回登录信息。
$json = file_get_contents('php://input');
$doi_tuong_truyen_vao = json_decode($json);
//print_r($doi_tuong_truyen_vao);
if($doi_tuong_truyen_vao)
{
include_once("database.php");
$db = new database();
$lenh_sql = "select * from sqa_nguoi_dung WHERE tai_khoan = '" . $doi_tuong_truyen_vao->data->ten_dang_nhap . "'";
$db->setQuery($lenh_sql);
$tt_nguoi_dung = $db->loadRow();
//print_r($tt_nguoi_dung);
if($tt_nguoi_dung)
{
if($tt_nguoi_dung->mat_khau == $doi_tuong_truyen_vao->data->mat_khau)
{
//print_r($tt_nguoi_dung);
$_SESSION["nguoi_dung"] = $tt_nguoi_dung;
$tt_nguoi_dung->thong_bao_loi = "";
echo json_encode($tt_nguoi_dung);
}
else
{
echo '{"thong_bao_loi":"Mật khẩu không chính xác!"}';
}
}
else
{
echo '{"thong_bao_loi":"Tài khoản không tồn tại!"}';
}
}
else
{
if($_SESSION["nguoi_dung"])
{
$chuoi = json_encode($_SESSION["nguoi_dung"]);
echo $chuoi;
}
else
{
$chuoi = "";
}
}
HTML
<div class="col-sm-8" ng-controller="form_dang_nhap_gio_hang">
<div class="shop-menu pull-right">
<ul class="nav navbar-nav">
<li ng-if="thong_tin_dang_nhap.ho_ten"><a href="#"><i class="fa fa-user"></i>{{thong_tin_dang_nhap.ho_ten}}</a></li>
<li><a href="xem-gio-hang"><i class="fa fa-shopping-cart"></i>Giỏ hàng</a><span class="so_luong_trong_gio"></span></li>
<li ng-if="!thong_tin_dang_nhap.ho_ten"><a class="btn" data-toggle="modal" href='#modal-id'><i class="fa fa-lock"></i>Đăng nhập</a></li>
</ul>
</div>
<div class="modal fade" id="modal-id">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">×</button>
<h4><span class="glyphicon glyphicon-lock"></span>Đăng nhập</h4>
</div>
<div class="modal-body" style="padding:40px 50px;">
<form role="form">
<div class="form-group">
<label for="usrname"><span class="glyphicon glyphicon-user"></span>Tài khoản</label>
<input ng-model="ten_dang_nhap" type="text" class="form-control" id="usrname" placeholder="Nhập tài khoản">
</div>
<div class="form-group">
<label for="psw"><span class="glyphicon glyphicon-eye-open"></span>Mật khẩu</label>
<input ng-model="mat_khau" type="password" class="form-control" id="psw" placeholder="Nhập mật khẩu">
</div>
<div class="checkbox">
<label><input type="checkbox" value="" checked>Ghi nhớ đăng nhập</label>
</div>
<button ng-click="btn_dang_nhap_tai_khoan()" class="btn btn-success btn-block"><span class="glyphicon glyphicon-off"></span> Đăng nhập</button>
</form>
</div>
</div>
</div>
</div>
</div>
任何想法??
答
当你编写angularjs时,你只是编码客户端......而php是服务器端语言......所以当你从客户端登录时,你应该在服务器端做一个sessionvariable
......并且将其发送到您的客户端以保存为html5功能的本地存储或会话存储。
现在,每当任何请求从客户端发送到服务器,存储在该sessionstorage
值必须被附加到请求..和检查,以服务器侧..
在情况下,它不提供在服务器端,它应该返回403
UNAUTHORIZED ACCESS状态码......它将被你的拦截器捕获,并且你将能够正确地维护会话。
你可以从这个链接的的localStorage和sessionStorage的.. http://ngmodules.org/modules/ngStorage
你能给我简单的例子Angularjs使用“本地存储或会话存储这是HTML5的功能”。我看到一些,但它不运行。 tks –
哦,确定人...你使用什么浏览器? @xuanhungNguyen –
在Chrome中,如果你按下F12键,并进入Resources选项卡,你会看到不同的存储可供我们使用..现在angularjs允许我们使用它们......我在答案中共享了几个这样的引用你可能会知道如何使用它们.. –