會話

2014-09-05 88 views
0

使用angularjs和PHP構建登錄。我遇到的問題是會議似乎沒有設置。會話

我有這樣的控制器,其使用時,我打登錄按鈕一個服務:

控制器:

$scope.doLogin = function() { 
loginService.login({username: $scope.username, password: $scope.password}); 

};

這裏是我的服務:

'use strict'; 
angular.module('gameApp_services').factory('sessionService', ['$http', function($http) { 
    return { 
     set:function(key, value) { 
      return sessionStorage.setItem(key,value); 
     }, 
     get:function(key) { 
      return sessionStorage.getItem(key); 
     }, 
     destroy:function(key) { 
      $http.post('lib/destroy_session.php'); //Förstör sessionen 
      return sessionStorage.removeItem(key); 
     } 
    }; 
}]).factory('loginService', function($http,$location,sessionService) { 
    return { 
     login: function(data, scope) { 
      var $promise = $http.post("lib/action.php", data); //send data to action.php 
      $promise.then(function(msg) { 
       var uid = msg.data; 
       console.log(uid); 
       if(uid) { 
        //scope.msgtxt='Correct information'; 
        sessionService.set('sess_id', uid); 
        $location.path('/game'); 
       } else { 
        scope.msgtxt='Incorrect information'; 
        $location.path('/firstpage'); 
       } 
      }); 
     }, 
     logout:function() { 
      sessionService.destroy('sess_id'); 
      $location.path('/firstpage'); 
     }, 
     islogged:function() { 

      var $checkSessionServer = $http.post('lib/check_session.php'); 
      return $checkSessionServer; 

      /*if(sessionService.get('user')) { 
       return true; 
      }*/ 
     } 
    } 
}); 

正如你所看到的,我做我的後臺,在那裏我檢查用戶名和密碼的電話,並設置的會話。返回的UID,包含會話ID = 1:

public function DoLogin($username, $password) 
    { 
     //Kolla så att användarnamn och lösenord är korrekt, returnera true eller false 
     $get_user = "SELECT id, username,password FROM users WHERE username='".$username."' AND password='".$password."'"; 
     $user_result = mysql_query($get_user) 
         or die(mysql_error()); 


     if(mysql_num_rows($user_result) == 1) 
     { 
      $_SESSION['sess_id'] = mysql_result($user_result, 0); 
      $_SESSION['sess_user'] = $username; 
      return $_SESSION['sess_id']; 
     } 
     else 
     { 
      return false; 
     } 

    } 

這工作,將正確的數據返回如預期,因此,會話ID 1

在我app.js我有代碼阻止你通過在URL中鍵入它要去/遊戲頁面:

gameApp.run(function($rootScope, $location, loginService) { 
    var routespermission=['/game']; //route that require login 
    $rootScope.$on('$routeChangeStart', function() { 
     if(routespermission.indexOf($location.path()) !=-1) 
     { 
      var connected = loginService.islogged(); 
      connected.then(function(msg) { 
       console.log(msg); 
       if(!msg.data) { 
        $location.path('/'); 
       }     
      }); 
     } 
    }); 
}); 

正如你可以看到,即時通訊使用我的login服務在這裏,在這裏我指的在服務islooged。在islogged我打電話給我的PHP後臺,check_session.php,我在那裏檢查是否存在會話:

<?php 
session_start(); 
if(isset($_SESSION['sess_id'])) { 
    echo "authentified"; 
} 
?> 

這將返回一個空字符串,會話未設置。當我嘗試var_dump($ _ SESSION)時,結果爲NULL。

當我登錄時在後端設置會話並且結果值爲1時,這怎麼可能?

回答

0

您確定要使用角度操作會話嗎?

會話存儲在瀏覽器和服務器上,當你以角度啓動一個請求時,會話將自動由請求頭攜帶,並且你可以在後臺使用你的php函數驗證它,所以我認爲你應該檢查你的php代碼確認會話存儲是否可用或者您的大巴可以通過cookie或會話存儲存儲會話

+0

正如您在我的問題中所看到的,我使用php在check_session.php中驗證了它。 – user500468 2014-09-05 08:54:22

+0

設置會話並獲取它從另一個請求看會話是否存在? – dddd1919 2014-09-05 08:59:44

+0

你能更具體嗎? – user500468 2014-09-05 09:02:30