Почему PHP сессия кажется пустой сама - PullRequest
0 голосов
/ 27 февраля 2020

Я создаю веб-сайт, у меня есть 2 страницы, одна для входа и одна для загрузки файла.

Когда пользователь входит в систему, я устанавливаю идентификатор этого пользователя, извлеченного из базы данных в * Переменная 1003 *, когда пользователь переходит на вторую страницу, он может загрузить файл, и ссылка на этот файл и идентификатор сохраняются в базе данных.

Мой внешний интерфейс, кстати, находится на совершенно другом домен, поэтому, когда пользователь загрузит файл, переменная $_SESSION будет пустой, как я могу решить?

PHP проверить страницу входа на example.com

<?php 
session_start();

if (isset($_SERVER['HTTP_ORIGIN'])) {
    header("Access-Control-Allow-Origin: {$_SERVER['HTTP_ORIGIN']}");
    header('Access-Control-Allow-Credentials: true');
    header('Access-Control-Max-Age: 86400');    // cache for 1 day
}

$a = headers_list();

require "Connessione.php";

$connessione = new Connessione();
$ris = $connessione->getUtente($_POST['id']);

if($risposta['esisteGia'])
{
    $_SESSION['ID'] = $ris[0]['IDUtente'];
    $_SESSION['Tipo'] = $ris[0]['Ruolo'];
}


echo json_encode($risposta);
?>

Внешний интерфейс для входа в систему, записанный в ReactJS на example2.com

const esisteGia = () => {
    async function controllaCheEsistaGia() {
      let udid = "123";
      let data = new FormData();
      data.append("id", udid);
      let risposta = await fetch(
        "https://example.com/checkLogin.php",
        {
          method: "POST",
          body: data,
          credentials: "include"
        }
      );

      risposta = await risposta.json();
      console.log(risposta);
    }

    controllaCheEsistaGia();
  };


На этом этапе установлен $_SESSION.

uploadFile. php на example.com

session_start();
if (isset($_SERVER['HTTP_ORIGIN'])) {
    header("Access-Control-Allow-Origin: {$_SERVER['HTTP_ORIGIN']}");
    header('Access-Control-Allow-Credentials: true');
    header('Access-Control-Max-Age: 86400');    // cache for 1 day
}

if(!isset($_SESSION['ID'])). //Here the session is now empty again
{
    header("Location: {$_SERVER['HTTP_ORIGIN']}/Login");
    die();
}
header('Content-Type: application/json; charset=utf-8');


$filePDF = $_FILES['pdfDaCaricare']['tmp_name']; //Also the $_FILES is not set, and I don't know why

example2.com / uploadFile

const caricaFile = async e => {
    const fd = new FormData();
    fd.append("pdfDaCaricare", file);


    await axios.post(
      "example.com/uploadFile.php"
      fd,
      {
        method: "POST",
        credentials: "include",
        headers: {
          "content-type": "multipart/form-data"
        },
        onUploadProgress: function(progressEvent) {
          let percentCompleted = Math.round(
            (progressEvent.loaded * 100) / progressEvent.total
          );
          document.getElementById("percentuale").innerText = percentCompleted;
        }
      }
    );
  };

Даже в localhost, это не работает

1 Ответ

0 голосов
/ 27 февраля 2020

Session Cook ie работает только для одного домена, поэтому, вероятно, даже https://example.com/checkLogin.php будет иметь проблемы с сеансом.

Может быть использовать разные сообщения для аутентификации вашего пользователя.

...