使用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時,這怎麼可能?
正如您在我的問題中所看到的,我使用php在check_session.php中驗證了它。 – user500468 2014-09-05 08:54:22
設置會話並獲取它從另一個請求看會話是否存在? – dddd1919 2014-09-05 08:59:44
你能更具體嗎? – user500468 2014-09-05 09:02:30