2016-04-20 40 views
5

Sto utilizzando Fetch Api nella mia applicazione.Impossibile recuperare Api per ottenere Session dal server PHP

Ho una pagina del server PHP per ottenere i dati di sessione che erano già stati definiti in precedenza. Sembra così:

<?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); 

Ho anche ottenuto un'altra pagina html per ottenere i dati della sessione. E sinceramente interessato in questo modo:

<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> 

Il problema è che quando uso $ .ajax(), i dati della sessione di poter essere correttamente mostrato. Ma quando uso fetch(), i dati della sessione non erano definiti.

Quindi, cosa succede e come posso risolvere il problema? Grazie!

+0

Si utilizza 'ajax' ma non si passa' session_id' e 'start_session' per iniziare una nuova sessione. Ma quando richiedi sul browser questo script, session_id viene salvato nel cookie del browser e puoi ottenere la sessione corretta. Le credenziali – Naumov

risposta

7

Se si desidera fetch per inviare i cookie, devi fornire l'opzione credentials.

Vedere https://developer.mozilla.org/en-US/docs/Web/API/GlobalFetch/fetch#Parameters per dettagli.

+1

possono essere impostate su "same-origin" – galki

+1

Quando si fornisce l'opzione credenziali, qual è la differenza tra "include" e "stessa origine"? Non riesco a trovare queste informazioni da nessuna parte. – kojow7

+0

@ kojow7 [Controlla i documenti MDN] (https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch) (Ho provato a copiare e incollare qui ma era un disastro). Fondamentalmente, un esempio pertinente per questa risposta, con 'include', mysite.com potrebbe ottenere una sessione da yoursite.com ma con 'same-origin' mysite.com non potrebbe ottenere la sessione di yoursite.com. –

1

jquery ajax è una normale richiesta ajax e il browser invia l'intestazione del cookie con l'id di sessione che identifica la sessione.

prendere pretende molto - invece una nuova sessione viene creata con le eventuali dati inviare la sessione php id sia con url o l'intestazione

un'occhiata a: http://php.net/manual/en/session.idpassing.php