#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 или конфигурации порта