Вызов API с использованием angular 7 не читает переменные сеанса PHP

Мне нужно создать простой вход с помощью 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);


  }

Но по-прежнему сеанс пользователя недоступен .. Мне нужна помощь, чтобы понять причину. Пожалуйста, проверьте изображение. Первый почтовый запрос успешен, а второй запрос получения не удался. В нем говорится, что переменная сеанса, которую я использовал (пользователь), недоступна. Но эта переменная была установлена ​​предыдущим запросом.

Это ошибка, которую я получаю

Спасибо

Вы должны поместить _this.user.getSomeData () в первую подписку. При этом он гарантирует, что вызов произойдет после создания сеанса из this.auth.getUserDetails ('admin', 'admin').

wannadream 16.12.2018 06:18

Я тоже пробовал это, но все равно он действует так, как будто не установлен $ _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);}))

coding_Lover 16.12.2018 06:38

Кажется, что angular не получает идентификатор сеанса PHP. Это будет причиной этого. Когда вы используете PHP $ _SESSION, он отправляет клиенту cookie, но если это не так, ключ сеанса не будет сохранен.

Benyamin Limanto 16.12.2018 08:11
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
3
392
1

Ответы 1

Вы работаете на двух разных серверах: localhost: 80 для PHP и Localhost: 4200 для angular, поэтому ваш запрос на сеанс - Localhost: 4200. Этот запрос не может получить доступ к сеансу PHP. поэтому, пожалуйста, установите заголовки в угловом формате для стороннего запроса PHP.

Другие вопросы по теме