2016-04-20 2 views
5

Я использую Fetch Api в своем приложении.Fetch Api не может получить сеанс с сервера PHP

У меня есть страница сервера 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(), данные сеанса не определены.

Итак, что не так, и как я могу это исправить? Благодаря!

+0

Вы используете 'ajax', но не передаете' session_id' и 'start_session', начиная новый сеанс. Но когда вы запрашиваете в браузере этот скрипт, ваш session_id сохраняется в cookie браузера, и вы можете получить правильный сеанс. – Naumov

ответ

7

Если вы хотите fetch отправить печенье, вы должны предоставить опцию credentials.

Для получения более подробной информации см. https://developer.mozilla.org/en-US/docs/Web/API/GlobalFetch/fetch#Parameters.

+1

Учетные данные могут быть установлены в «одинаковое происхождение» – galki

+1

При предоставлении параметра учетных данных в чем разница между «include» и «same-origin»? Кажется, я не могу найти эту информацию нигде. – kojow7

+0

@ kojow7 [Проверить документы MDN] (https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch) (я попытался скопировать-вставить здесь, но это был беспорядок). В принципе, подходящий пример для этого ответа, с «include», mysite.com мог бы получить сеанс с вашего сайта, но с «одинаковым происхождением» mysite.com не смог получить сеанс yoursite.com. –

1

jquery ajax - это обычный запрос ajax, и браузер отправляет заголовок файла cookie с идентификатором сеанса, который идентифицирует ваш сеанс.

выборки Doesnt - вместо того, чтобы новая сессия создается без каких-либо данных отправить PHP идентификатор сессии либо URL или заголовка

посмотреть на: http://php.net/manual/en/session.idpassing.php

Смежные вопросы