Я использую Fetch Api в своем приложении.
У меня есть страница сервера PHP, чтобы получить данные сеанса, которые уже были определены ранее. Это выглядело так:
<?php header('Content-Type: application/json; charset=UTF-8'); header('Access-Control-Allow-Origin: *'); session_start(); // $_SESSION['data'] already defined before $result = array(); // print_r($_SESSION['data']); if (isset($_SESSION['data'])) { $result = $_SESSION['data']; $result['code'] = 'ok'; } else { $result['code'] = 'error'; } echo json_encode($result, JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES);
Я также получил еще одну html-страницу, чтобы получить данные сеанса. Это выглядело так:
<script> $(function() { // use $.ajax $.ajax({ url: 'session.php', dataType: 'json' }) .done(function(res) { console.log(res); }); // end // use fetch fetch('session.php').then(function(res) { if (res.ok) { res.json().then(function(obj) { console.log(obj); }); } }); // end }); </script>
Проблема в том, что когда я использую $ .ajax (), данные сеанса могут быть правильно показаны. Но когда я использую fetch (), данные сеанса не определены.
Итак, что не так, и как я могу это исправить? Благодаря!
Если вы хотите, чтобы fetch
отправлял файлы cookie, вы должны credentials
параметр credentials
.
Подробнее см. https://developer.mozilla.org/en-US/docs/Web/API/GlobalFetch/fetch#Parameters .
jQuery ajax – это обычный запрос ajax, и браузер отправляет заголовок файла cookie с идентификатором сеанса, который идентифицирует ваш сеанс.
fetch does not – вместо этого создается новый сеанс с любыми данными, отправляющими идентификатор сеанса php либо с URL-адресом, либо с заголовком
посмотрите: http://php.net/manual/en/session.idpassing.php