PHP Cookie не установлен при отправке через POST-запрос от Angular

#php #angular #cookies

#php #angular #файлы cookie

Вопрос:

Я хочу установить базовый cookie, когда пользователь их принимает. Поэтому я использую Angular с PHP-Backend. Angular работает на localhost: 4200 и PHP через XAMPP на localhost. Cookie устанавливается, когда я просто отделяю часть «установить cookie» в конец файла. Когда я выполняю вызов API, if-условия тоже работают, потому что я получаю правильные ответные сообщения. Однако, когда я выполняю вызов API через Angular, cookie не устанавливается.

 <?php
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: PUT, POST, GET, DELETE, OPTIONS');
header('Access-Control-Allow-Headers: content-type');
header('Content-Type: application/json');

$json = file_get_contents('php://input');
$cookies = json_decode($json, true);

$cookie_name = 'allCookies';

if ($cookies['allCookies'] == true) {
    $cookie_value = 'set';
    setcookie($cookie_name, $cookie_value, time()   (86400 * 365), '/');
    $message = "Cookies gesetzt!";
} else {
    $cookie_value = 'unset';
    unset($_COOKIE["allCookies"]);
    setcookie($cookie_name, $cookie_value, time() - 3600, '/');
    $message = "Cookies entfernt!";
}

$response = array(
    "message" => $message,
);

// setcookie($cookie_name, 'set', time()   (86400 * 365), '/'); When I outcomment this line and run the php in the browser, a cookie is set correctly

echo json_encode($response);
  

Комментарии:

1. можете ли вы также поделиться своим кодом angular. Поскольку вы используете два разных порта, вам необходимо открыть свой адрес api в вашем браузере, чтобы увидеть файлы cookie в инструментах разработки вашего браузера.

2. @Alimo какую часть (ы) вам нужно увидеть?

3. Я пробовал ваш код локально и с postman, он отлично работает, когда я отправляю {«allCookies»:»set»} в качестве тела запроса, он возвращает сообщение «Cookies gesetzt!», а также отправляет заголовок Set-Cookie со значением allCookies=set; expires = Sat, 11-Sep-2021 18:32:20 GMT; Max-Age = 31536000; path =/ Должна быть проблема с вашим приложением Angular, возможно, вы проверяете cookie на порт 4200 или вы неправильно отправляете тело запроса.

4. @Alimo я загрузил производственную сборку, и там она работает нормально. Сообщение, которое я получаю в качестве ответа от post-запроса, является правильным, поэтому я думаю, что проблема в php или конфигурации порта