POST-запрос с идентификатором сессии застревает без ошибок

1

Я пытаюсь создать простой в использовании API с php, но я столкнулся с несколькими проблемами. Я работаю над пользователем api, который делает основной материал CRUD.

Если я выполняю запрос POST с помощью cURL для моего пользователя api (user.php), во время выполнения user.php используется новый идентификатор сеанса.

Поэтому для борьбы с этим я попытался отправить текущий идентификатор сеанса с запросом POST на user.php. Проблема, с которой я столкнулся сейчас, заключается в том, что после установки идентификатора с session_id($_POST['session']) а затем, начиная мой сеанс с session_start() мой сервер застрянет при выполнении этого кода и в конечном итоге вызовет ошибку внутреннего сервера 500,

Я попытался заставить свой сервер показать мне, что такое ошибка с ini_set('display_errors', 1); и файл.htaccess (содержимое: php_flag display_errors 1), но безрезультатно, сервер просто застревает.

test.php

<?php
    session_start();

    // Check for available session
    if (!isset($_SESSION['id'])) {
        header('location: index.php');
    } else {
        // Initialize cURL
        $curl = curl_init();

        // Set parameters for POST request
        curl_setopt_array($curl, [
            CURLOPT_RETURNTRANSFER => 1,
            CURLOPT_URL => 'http://localhost/api/user.php',
            CURLOPT_POST => 1,
            CURLOPT_POSTFIELDS => http_build_query([
                'session' => session_id(),
                'username' => 'testuser',
                'password' => 'testalot',
                'name' => 'testuser',
                'isAdmin' => 0
            ])
        ]);

        // Execute POST request
        $response = curl_exec($curl);

        /* <<< Doesn't get beyond this point. */

        // Dump JSON
        var_dump($response);

        // Close cURL session
        curl_close($curl);
    }
?>

user.php

<?php
  // Declare integer checking function
  function isInteger($input) {
    return ctype_digit(strval($input));
  }

  // Declare result object
  $output = ['success' => false, 'data' => [], 'error' => ''];

  // Action on POST
  if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    // Check if session id was sent
    if (!empty($_POST['session'])) {
      // Set session id
      session_id($_POST['session']);

      // Start session with received session id
      session_start();

      /* <<< Freezes at this point. */

      // Check session for available user id
      if (isset($_SESSION['id'])) {
        // Only admins are allowed to execute POST requests
        if ($_SESSION['isAdmin'] == 1) {
          // ... more code ...

Я бы, конечно, также использовал другой метод доступа к моему API, который не требует от меня отправки текущего идентификатора сеанса, если таковой имеется. Есть идеи?

ОБНОВИТЬ:

Посмотрите комментарий @Neok по моему вопросу. Это решение. Просто указывая на других, которые могут иметь такую же проблему.

  • 1
    Добавьте эту строку кода в начале вашей страницы для сообщения об ошибках. это может помочь. error_reporting (E_ALL);
  • 0
    Посмотрите на этот вопрос - как поддерживать php-сессии с curl
Показать ещё 11 комментариев
Теги:
curl
session

2 ответа

0

Убедитесь, что php.ini установлен для регистрации всех ошибок

error_reporting(E_ALL);

или

ini_set('error_reporting', E_ALL);
  • 0
    У меня нет доступа к php.ini на сервере, который я использую :( Я попытался запустить все локально с xampp, но это также не помогло. Не выдается никаких ошибок, выполнение просто застряло ... в бесконечный цикл можно сказать.
  • 0
    так, сделайте это в php с помощью 'ini_set (' error_reporting ', E_ALL)'
0

Документация PHP говорит, что session_id() возвращает идентификатор сеанса для текущего сеанса или пустую строку (""), если текущий сеанс отсутствует (текущий идентификатор сеанса отсутствует). Поэтому вместо того, чтобы принимать $_SESSION['id'], попробуйте следующее:

// Check for available session
if (session_id() == "") {
    header('location: index.php');
} else {
    ...
}

В противном случае ваш код перенаправляется на index.php в цикле, вызывающем ошибку 500.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню