getJSON и токен OAuth

#javascript #php #jquery #oauth #getjson

#javascript #php #jquery #oauth #getjson

Вопрос:

Я работаю над скриптом, который использует jQuery (getJSON) для извлечения значений со страницы PHP. Страница PHP корректно отображает закодированный объект с правильными ключами и значениями, причем значения извлекаются из $_SESSION переменной. Однако, когда javascript пытается получить доступ к этой странице, объект извлекается, но только ключи остаются нетронутыми, а значения заменяются на null . Возвращаемые значения извлекаются null из $_SESSION , тогда как любые значения, добавленные вручную, возвращаются правильно. Можно ли этого избежать / исправить? Было бы разумнее хранить токены доступа в файлах cookie, а не в сеансах?

Примеры кода:

 <?php
  session_start();

  $token = $_SESSION['token'] -> access_token;

  $information = [
     "media_token" => $token,
     "test" => "testing"
     ]; 

  print json_encode($information); //when page is directly accessed, 
                                   //returns correct information
?>
  

Javascript:

 $.getJSON('oauth.php', function (data){
            console.log(data); // media_token: null
                               // test: testing
    });
  

Ответ №1:

Оказывается, проблема заключалась в том, что я обращался к странице, содержащей JS, используя страницу, отличную от www, тогда как добавление www устранило проблему. Не уверен, почему, но, очевидно, это изменилось, если страница могла получить доступ к $ _SESSION или нет. Если бы кто-нибудь мог объяснить, почему это так, это было бы здорово, приветствия.

Ответ №2:

Попробуйте этот код, он поможет вам

 <html>
<head>
<script type="text/javascript" src="https://code.jquery.com/jquery-2.1.1.min.js"></script>
<script>
$(document).ready(function() {
$.getJSON('oauth.php', function (data){
            console.log(data); // media_token: null
                               // test: testing
    });
});
</script>
</head>
<body>
<div class="title">
    <h2>PRESS</h2>
    <p>hello</p>
</div>
</body>
</html>
  

oauth.php файл

  session_start();
  $_SESSION['token']="Hello1212";
  $token = $_SESSION['token'];// -> access_token;

  $information = array(
    "media_token" => $token,
    "test" => "testing"
);

  print json_encode($information); //when page is directly accessed, 
                                   //returns correct information
  

Комментарии:

1. Токен может быть отправлен через javascript ‘oauth.php?token=value’. Это поможет вам получить ценность.

2. Спасибо за ответ — значение $_SESSION[‘token’], безусловно, устанавливается как при прямом доступе oauth.php результирующий вывод выглядит следующим образом: {"token":"283Eeh.380dc4hgpp74d0d8c939d12oll","test":"testing"} но проблема остается в том, что когда $.getJSON обращается к странице, media_token возвращается как null , но возвращаются ключ test и значение testing

3. я получил значения на странице: Object { media_token=»Hello1212″, test=»тестирование»}

4. PHP блокирует доступ к файлу сеанса во время выполнения ajax-вызова, чтобы убедиться, что данные не повреждены во всех соединениях, поэтому вам нужно использовать session_write_close() для завершения записи, чтобы получить ответ от второго ajax-вызова.