使用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