Nico R.: SESSION steht in fetch-Datei nicht zur Verfügung

Beitrag lesen

Hallo zusammen,

aufbauend auf eurem Tutorial zum File Upload möchte ich gerne auch einen Fortschrittsbalken anzeigen. Ich scheitere allerdings daran, per fetch die SESSION zum Upload anzuzeigen. Hier kurz der grobe Ablauf bis zu der Stelle, wo es hakt.

Formulardatei:

<form id="galerie_upload" method="post" enctype="multipart/form-data">
  <input type="hidden" name="progress" value="galerie">
  ...
</form>
...
$_SESSION["test"] = "test";

Absenden der Formulardaten per fetch:

const progress = document.querySelector('[name="progress"]').value;
...
formData.append('<?=ini_get("session.upload_progress.name")?>', progress);
...		
fetch("sql/galerie_upload.php", {
  method: "POST",
  body: formData
...

galerie_upload.php:

session_start();

echo "<pre>";
var_dump($_POST);
echo "</pre>";

echo "<pre>";
var_dump($_SESSION);
echo "</pre>";

Antwort von galerie_upload.php:

array(1) {
  ["PHP_SESSION_UPLOAD_PROGRESS"]=>
  string(7) "galerie"
}

array(2) {
  ["test"]=>
  string(4) "test"
}

Dort wird also die SESSION mit dem Test-Eintrag erstellt und auch das POST wird korrekt übertragen. Den SESSION-Eintrag zum progress hatte ich hier noch nicht erwartet. Den wollte ich mir mit einem timeout per weiterem fetch anzeigen lassen:

Anzeigen der progress-SESSION per fetch:

function progress_timeout() {		
		
  fetch("sql/galerie_upload_progress.php").then((response) => {
    console.log(response);
  });		
		
  window.setTimeout(function() {
    console.log("progress...");
    if(!fertig) { // globale Variable. Wird auf true gesetzt in galerie_upload.php
      progress_timeout();
    }
    else {
      clearTimeout(this);
      return;
    }
  }, 1000);
}
		
window.setTimeout(progress_timeout,1000);	

galerie_upload_progress.php:

session_start();

echo "<pre>";
var_dump($_SESSION);
echo "</pre>";

Antwort aus galerie_upload_progress.php:

array(0) {
}

In dieser zweiten fetch-Datei steht die SESSION also plötzlich nicht mehr zur Verfügung. Wieso ist das so? Hat jemand eine Idee? Ich hoffe, das war nicht zu viel Code. Ich habs so weit es ging, kurz gehalten.

Schöne Grüße

Nico