Мне нужно создать простой вход с помощью angular и использовать сеансы. для этого у меня есть два файла php и файлы angular.
Это файл PHP 1
session_start();
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: PUT, GET, POST, DELETE, OPTIONS');
header('Access-Control-Allow-Headers: Content-Type');
$postdata = file_get_contents("php://input");
if (isset($postdata) && !empty($postdata)) {
$request = json_decode($postdata);
$username=trim($request->username);
$password=trim($request->password);
if ($username == 'admin' && $password == 'admin') {
$_SESSION['user'] = 'admin';
?>
{
"success": true,
"secret": "This is the secret no one knows but the admin"
}
<?php
} else {
?>
{
"success": false,
"message": "Invalid credentials"
}
<?php
}
} else {
//var_dump($_POST)
?>
{
"success": false,
"message": "Only POST access accepted"
}
<?php
}
?>
Это файл PHP 2
<?php
session_start();
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: PUT, GET, POST, DELETE, OPTIONS');
header('Access-Control-Allow-Headers: Content-Type');
$user = $_SESSION['user'];
echo '{
"message": "'.$user.'",
"success": true
}';
?>
В одном из моих компонентов ngOnInit () я вызвал оба этих API (я знаю, что первый должен запускаться кнопкой отправки входа в систему, но для целей тестирования я использовал оба под одним). Я даже использовал функцию settimeout, чтобы отложить второй вызов
ngOnInit() {
this.auth.getUserDetails('admin','admin')
.subscribe(
data => {
console.info('success',data);
if (data.success){
}
else{
window.alert("invalid");
}
},
error=> {
console.info('failed',error);
}
)
var _this=this;
setTimeout(function(){
_this.user.getSomeData().subscribe(data=>{
console.info(data);
})
}, 3000);
}
Но по-прежнему сеанс пользователя недоступен .. Мне нужна помощь, чтобы понять причину. Пожалуйста, проверьте изображение. Первый почтовый запрос успешен, а второй запрос получения не удался. В нем говорится, что переменная сеанса, которую я использовал (пользователь), недоступна. Но эта переменная была установлена предыдущим запросом.
Спасибо
Я тоже пробовал это, но все равно он действует так, как будто не установлен $ _SESSION ['user']. this.auth.getUserDetails ('admin', 'admin') .subscribe (data => {console.info ('success', data); if (data.success) {let _this = this; _this.user.getSomeData ( ) .subscribe (data1 => {console.info (data1);})} else {window.alert ("invalid");}}, error => {console.info ('failed', error);}))
Кажется, что angular не получает идентификатор сеанса PHP. Это будет причиной этого. Когда вы используете PHP $ _SESSION, он отправляет клиенту cookie, но если это не так, ключ сеанса не будет сохранен.






Вы работаете на двух разных серверах: localhost: 80 для PHP и Localhost: 4200 для angular, поэтому ваш запрос на сеанс - Localhost: 4200. Этот запрос не может получить доступ к сеансу PHP. поэтому, пожалуйста, установите заголовки в угловом формате для стороннего запроса PHP.
Вы должны поместить _this.user.getSomeData () в первую подписку. При этом он гарантирует, что вызов произойдет после создания сеанса из this.auth.getUserDetails ('admin', 'admin').