2016-06-15 102 views
0

代碼運行良好,但是當我刷新頁面服務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">&times;</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> 

任何想法??

回答

1

當你編寫angularjs時,你只是編碼客戶端......而php是服務器端語言......所以當你從客戶端登錄時,你應該在服務器端做一個sessionvariable ......並且將其發送到您的客戶端以保存爲html5功能的本地存儲或會話存儲。

現在,每當任何請求從客戶端發送到服務器,存儲在該sessionstorage值必須被附加到請求..和檢查,以服務器側..

在情況下,它不提供在服務器端,它應該返回403UNAUTHORIZED ACCESS狀態碼......它將被你的攔截器捕獲,並且你將能夠正確地維護會話。

你可以從這個鏈接的的localStorage和sessionStorage的.. http://ngmodules.org/modules/ngStorage

+0

你能給我簡單的例子Angularjs使用「本地存儲或會話存儲這是HTML5的功能」。我看到一些,但它不運行。 tks –

+0

哦,確定人...你使用什麼瀏覽器? @xuanhungNguyen –

+0

在Chrome中,如果你按下F12鍵,並進入Resources選項卡,你會看到不同的存儲可供我們使用..現在angularjs允許我們使用它們......我在答案中共享了幾個這樣的引用你可能會知道如何使用它們.. –