Задача простая, установить при определенном действии (например добавление в корзину) cookie через fetch запрос, хранить собираюсь объект корзины с минимальными данными (id товара, кол-во и стоимость) но столкнулся с проблемой что после отправки запроса cookie встают судя по ответным заголовкам но при последующем fetch запросе на получение куки (работаю через setcookie в php) в ней уже ничего нет, странно получается ведь при тестировании через postman все работает как надо, данные устанавливаю, потом получаю и все есть, а с браузера прям беды какие то, вот код клиента и сервера
const path = SERVER_URL + "/cart/index.php"
async function setCookieCart() {
const data = new FormData()
data.append("id", "296653")
data.append("price", "24320")
data.append("price_old", "0")
data.append("qty", "1")
const resp = await fetch(
path,
{
method: "POST",
body: data,
credentials: "same-origin"
}
)
const json = await resp.json()
console.log(json);
}
async function getCookieCart() {
const resp = await fetch(path, {method: "GET"})
const data = await resp.json()
console.log(data);
}
setCookieCart()
setTimeout(() => {
getCookieCart()
}, 5000)
header('Access-Control-Allow-Origin: https://domainname.ru');
header('Access-Control-Allow-Credentials: true');
header('Access-Control-Allow-Methods: GET, POST');
class CartService {
public function __construct($data) {
$this->data = $data;
}
public function getCart() {
$cookie = isset($_COOKIE["COOKIE_NAME"]) ? $_COOKIE["COOKIE_NAME"] : "[]";
return $cookie;
}
public function setCart() {
$json = json_encode($this->data, JSON_UNESCAPED_UNICODE);
$parse = explode('.', $_SERVER['HTTP_HOST']);
if (count($parse) > 2 )
array_shift($parse);
$domain = join(".", $parse);
try {
setcookie(
"COOKIE_NAME",
$json,
time() + 604800,
"/cart",
$domain,
false,
true
);
} //
catch (\Throwable $th) {
throw $th;
}
return $json;
}
}
if ($_SERVER['REQUEST_METHOD'] === 'GET') {
$service = new CartService($_GET);
$json = $service->getCart();
$cart = json_decode($json, true);
$resp = [
"status" => !empty($cart),
"count" => count($cart),
"cart" => $cart,
];
die(json_encode($resp, JSON_UNESCAPED_UNICODE));
}
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$service = new CartService($_POST);
$result = $service->setCart();
die($result);
}