2017-02-05 52 views
2

我嘗試創建一個登錄系統,但我希望會話可以從PHP代碼中獲取。如果會話登錄是falsenull它將重定向到登錄頁面。 這裏我跑AngularJS代碼:如何從PHP獲取會話到AngularJS進行重定向

app.run(["$rootScope", 'adminService', '$location', function($rootScope, adminService, $location) { 
    $rootScope.$on("$routeChangeStart", function() { 
     $location.path('/login'); 
    }); 
}]); 

路由代碼:

app.config(function($routeProvider){ 
    $routeProvider.when('/', { 
     templateUrl: 'welcome.html' 
    }).when('/administrator', { 
     templateUrl: './part/administrator.html', 
     controller: 'adminPageControl' 
    }).when('/administrator/:id_admin', { 
     templateUrl: './part/addit-administrator.html', 
    }).when('/alternatif', { 
     templateUrl: './part/alternatif.html', 
     controller: 'alternatifPageControl' 
    }).when('/alternatif/:id_alternatif', { 
     templateUrl: './part/addit-alternatif.html' 
    }).when('/skala', { 
     templateUrl: './part/skala.html', 
     controller: 'skalaPageControl' 
    }).when('/skala/:id_skala', { 
     templateUrl: './part/addit-skala.html' 
    }).when('/kriteria', { 
     templateUrl: './part/kriteria.html', 
     controller: 'kriteriaPageControl' 
    }).when('/kriteria/:id_kriteria', { 
     templateUrl: './part/addit-kriteria.html' 
    }).when('/klasifikasi', { 
     templateUrl: './part/klasifikasi.html', 
     controller: 'klasifikasiPageControl' 
    }).when('/klasifikasi/:id_klasifikasi', { 
     templateUrl: './part/addit-klasifikasi.html' 
    }).when('/analisis', { 
     templateUrl: './part/topsis.php', 
     controller: 'analisisPageControl' 
    }).when('/login', { 
     templateUrl: './login.html' 
    }).when('/logout', { 
     template: 'logout' 
    }).otherwise({ 
     redirectTo: '/' 
    }); 
}); 

PHP函數會話代碼:

function logincheck(){ 
    return $_SESSION['authid']; 
} 

logincheck(); 
+1

你應該建立在你的後端的唯一的會話標識,而不直接解析PHP會話狀態到您的客戶端。請記住,AngularJS是爲SPA設計的。因此,使您的客戶端通過使用API​​與後端進行通信。例如一個RESTful API。一旦用戶通過客戶端登錄,返回一個唯一的會話令牌給客戶端。在任何安全的數據HTTP請求上放置並驗證該令牌。看看oAuth處理,它也一樣。 – lin

+0

如何製作令牌? –

+0

例如'$ token = md5('what-ever-you-want');' – lin

回答

0

對方回答是正確的。通過使用API​​與後端進行通信是一種很好的做法,因爲AngularJS是爲SPA設計的。但是,如果你堅持使用會話,沒關係。您可以創建一個路由器諸如/api/logincheck

PHP:

public function index() 
{ 
    $res = ['login'=>false]; 
    if(isset($_SESSION['authid'])) 
    { 
     $res['login'] = true; 
    } 
    echo json_encode($res); 
} 

JS:

$http.get('http://XX/api/checklogin').success(function(res){ 
    if(res.login) 
    { 
     #handle it 
    } 
}); 
+0

booom,我明白了........ –

0

你應該建立在你的後端的唯一的會話令牌不必解析PHP -Session直接進入你的客戶端。請記住,AngularJS是爲SPA設計的。因此,使您的客戶端通過使用API​​與後端進行通信。例如一個RESTful API。一旦用戶通過客戶端登錄,返回一個唯一的會話令牌給客戶端。在每個安全數據HTTP請求上放置並驗證該令牌。看看oAuth處理,其相同。

您可以創建一個簡單的令牌:$token = md5('what-ever-you-want');並將其實施到您的API邏輯中。在這裏您可以找到關於handling security interfaces的更多信息。

enter image description here