在Angular2 App中,当我从LoginComponent登录时,会在PHP服务器中成功创建Session变量 .
但是当我的应用程序更改其路径到其他组件(例如:Eg:SchoolsListComponent)然后它从PHP服务器请求某些内容时,我注意到会话变量根本不存在 .
当我从我的SchoolListComponent调用get_schools_list.php时发生以下错误
未定义的索引:第3行的C:\ xampp \ htdocs \ myapp \ admin \ session_secure.php中的id
在PHP Server中,我有以下文件
-
login.php .
-
session_secure.php .
-
get_schools_list.php .
-
angular_cors_fix.php .
-
db_connect.php .
在Angular2中,我有以下组件
-
LoginComponent .
-
SchoolsListComponent .
这是每个文件的代码
- LoginComponent类:
phpUrl = "http://192.168.43.162/myapp/admin/";
login(username:string, password:string){
let postdata = {
username : username,
password : password
}
let headers = new Headers();
headers.append('Content-Type','application/x-www-form-urlencoded');
return this.http.post(`${this.phpUrl}loginAdmin.php`,postdata,{
headers : headers
}).subscribe(
(response : Response)=>{
let data = response.json();
if(data.success == 1){
this.router.navigate(["/schools_list"]); //Routing to My Main Component
}
}
);
}
- SchoolListComponent类:
phpUrl = "http://192.168.43.162/myapp/admin/";
constructor(){ this.getSchools(); }
getSchools(){
let post_data = {
some_post_data : "data"
}
let headers = new Headers();
headers.append('Content-Type','application/x-www-form-urlencoded');
let myObserver = this.http.post(`${this.phpUrl}get_schools_list.php`,post_data,{
headers : headers
});
myObserver.subscribe(
(data : Response)=>{
let session = data.json();
if(session.loggedIn == false){
this.router.navigate(["/login"]);
}
}
);
return myObserver;
}
- login.php
<?php
require "angularfix.php";
require "db_connect.php";
$response = array();
$data = json_decode(file_get_contents("php://input"));
$username = $data->username;
$password = $data->password;
if (!preg_match('/[\'^£$%&*()}{#~?><>,|=+¬-]/', $username)){
$query ="SELECT * FROM `admin` WHERE `username` = '$username' AND `password` = '$password'";
if($result = mysqli_query($database,$query)){
if($row = mysqli_fetch_array($result)){
$response['success'] = 1;
$response['message'] = "Successfully logged in !!";
$response['admin_id'] = $row['admin_id'];
session_start();
$_SESSION['id']=session_id();//Here i initialized session id
$response['id'] = $_SESSION['id'];
$response['savepath'] = session_save_path();
storeIntoSessionAdminId($response['admin_id']);
}else{
$response['success'] = 0;
$response['message'] = "Username or Password Invalid";
$response['error'] = "Username or Password Invalid";
}
}else{
$response['success'] = 0;
$response['message'] = "Error in Server";
$response['error'] = "".mysqli_error($database)."";
}
}else{
$response['error'] = "Special characters not allowed";
$response['success'] = 0;
}
// echoing JSON response
echo json_encode($response);
function storeIntoSessionAdminId($id){
$_SESSION['admin_id']=$id;
}
?>
- session_secure.php
<?php
session_start();
$response = array();
if($_SESSION['id'] == session_id()){
$response['admin_id'] = $_SESSION['admin_id'];
$response["loggedIn"] = true;
$response['message'] = "user has session !!!";
$response['success'] = 1;
}
else{
$response["loggedIn"] = false;
$response['message'] = "user dont have any session !!!";
$response['success'] = 0;
echo json_encode($response);
exit();
}
?>
- get_schools_list.php
<?php
require "angular_cors_fix.php";
require "session_secure.php";
require "db_connect.php";
$response["schools"] = array();
$query = "SELECT * FROM school";
if($result = mysqli_query($database,$query)){
if(mysqli_num_rows($result)){
while ($row = mysqli_fetch_array($result)) {
$temp = array();
$temp["school_id"] = $row["school_id"];
$temp["school_name"] = $row["school_name"];
$temp["data_phase"] = $row["data_phase"];
$temp["school_address"] = $row["school_address"];
$temp["city"] = $row["city"];
$temp["pincode"] = $row["pincode"];
$temp["total_students"] = $row["total_students"];
$temp["head_name"] = $row["head_name"];
array_push($response["schools"],$temp);
}
$response['success'] = 1;
$response['message'] = "Data Available";
}else{
$response['success'] = 0;
$response['message'] = "Data Not Available";
}
}
$response["success"] = 1;
$response["message"] = "Data Available";
echo json_encode($response);
?>
- angular_cors_fix.php:
<?php
header("Content-Type: application/json; charset=UTF-8");
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET, POST');
?>
- db_connect.php:
<?php
date_default_timezone_set('Asia/Kolkata');
$database = mysqli_connect('localhost', 'root', '', 'myapp')
or die(mysqli_error($database));
?>
我的应用流程如下
-
LoginComponent:
-
登录请求服务器“Login.php”创建会话 .
-
成功登录时重定向到SchoolListComponent .
-
SchoolListComponent:
-
请求学校JSON服务器,并检查会话
-
如果会话不存在,则重定向到LoginComponent .
-
如果会话存在,则在模板中显示学校列表 .
我粘贴了所有文件因为,我认为问题可能是由于多种原因造成的:
-
CORS问题 .
-
单页应用程序 .
-
Headers
-
PHP会话 .
-
Angular2 / PHP本身 .
请指导我如何解决这个问题的 Session 谢谢..