2016-04-20 7 views
5

मैं अपने आवेदन में 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 ब्राउज़र कुकी में सहेजे जाते हैं और आप सही सत्र प्राप्त कर सकते हैं। – Naumov

उत्तर

7

आप fetch कुकीज़ भेजने के लिए चाहते हैं, आपको credentials विकल्प प्रदान करना होगा।

विवरण के लिए https://developer.mozilla.org/en-US/docs/Web/API/GlobalFetch/fetch#Parameters देखें।

+1

क्रेडेंशियल को 'समान-उत्पत्ति' पर सेट किया जा सकता है – galki

+1

क्रेडेंशियल्स विकल्प प्रदान करते समय, 'शामिल' और 'समान-उत्पत्ति' के बीच क्या अंतर है? मुझे यह जानकारी कहीं भी नहीं मिल रही है। – kojow7

+0

@ kojow7 [एमडीएन दस्तावेज़ों की जांच करें] (https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch) (मैंने यहां कॉपी-पेस्ट करने की कोशिश की लेकिन यह एक गड़बड़ थी)। असल में, इस जवाब के लिए प्रासंगिक उदाहरण, 'शामिल' के साथ, mysite.com yoursite.com से एक सत्र प्राप्त कर सकता है लेकिन 'उसी-मूल' mysite.com के साथ yoursite.com का सत्र नहीं मिल सका। –

1

jquery AJAX एक सामान्य AJAX अनुरोध है और ब्राउज़र सत्र सत्र के साथ कुकी हेडर भेज रहा है जो आपके सत्र की पहचान करता है।

does not को लाने - के बजाय एक नया सत्र के साथ बनाई गई है किसी भी डेटा बाहर या तो यूआरएल या हेडर के साथ php सत्र id भेज

पर एक नजर है: http://php.net/manual/en/session.idpassing.php

संबंधित मुद्दे