PHP-Sitzung, warum ist session_start () mehrmals erforderlich?

Ich schreibe eine Webanwendung, die POST-Daten in einer Sitzung auf einer Seite speichert und dann auf eine andere Seite umleitet, um die erstellten Sitzungsinformationen zu verwenden. Dies geschah, nachdem ich gelesen hatte, dass der richtige Weg, Daten zu verarbeiten und anzuzeigen, darin besteht, sie in zwei verschiedene Skripte zu unterteilen, damit kein redundantes $ _POST-Datenproblem auftritt. Dies bedeutet, dass $ _POST nicht bei jeder Seitenaktualisierung dieselben Daten an den Server sendet.

Ich habe eine Ansichtsseite,index.php und eine Datenverarbeitungsseite,setDate.php. Beim Betrachten vonindex.php, der Benutzer kann @ einstell$_POST['month'] und$_POST['year'] -Variablen über ein Eingabeformular senden und an setDate senden, um @ zuzuweis$_SESSION['desMonth'] und$_SESSION['desYear'] beziehungsweise

Es war nicht, bis ich eine zweite (IMO redundant) hinzugefügtsession_start(); Erklärung amsetDate.php dass der Code so funktioniert, wie ich es wollte. Ohne es war es, als obindex.php ignoriertesetDate.php 's$_SESSION[*] Änderungen vollständig.

Warum muss ich dieses redundante @ definieresession_start(); wenn ich die Sitzung bereits gestartet habe (und das PHPSESSID-Cookie erhalten habe), auf dem initialenindex.php bei dem die$_SESSION[*] Daten werden verwendet?

Hier sind einige funktionierende Code-Schnipsel:

setDate.php

<?php
require_once 'jan.php';
session_start();

//get the requested month and years to view (iterative).
if(isset($_POST['nextMonth']) && filter_var($_POST['nextMonth'], FILTER_SANITIZE_NUMBER_INT)) { //this filter only allows +- and 0-9
    $_SESSION['desMonth'] += sanitizeInput($_POST['nextMonth']);
    if($_SESSION['desMonth'] > 12) {
        $_SESSION['desMonth'] = $_SESSION['desMonth']-12;
        $_SESSION['desYear'] += 1;
    }
    else if($_SESSION['desMonth'] < 1) {
        $_SESSION['desMonth'] = 12;
        $_SESSION['desYear'] -= 1;
    }
}

//get the explicit month and years to view.
if(isset($_POST['month']) && filter_var($_POST['month'], FILTER_SANITIZE_NUMBER_INT)) {
    $_SESSION['desMonth'] = sanitizeInput($_POST['month']);
    echo "set month";
}
if(isset($_POST['year']) && filter_var($_POST['year'], FILTER_SANITIZE_NUMBER_INT)) {
    $_SESSION['desYear'] = sanitizeInput($_POST['year']);
    echo "set year";
}

echo $_SESSION['desMonth'];
echo $_SESSION['desYear'];
header("Location: /");
die();

?>

Truncatedindex.php

<?php 
session_start();
require_once 'cellUpdater.php';

$timeForDateUse = mktime(1,1,10,$_SESSION['desMonth'],1,$_SESSION['desYear']); //this line is used for various formatting below.
...

Ohne dassession_start(); Deklaration insetDate.php das$_SESSION[*] -Daten bleiben nicht erhalten. Warum

EDIT: Frage beantwortet, Bearbeitung für imaginäre Internetpunkte

Antworten auf die Frage(2)

Ihre Antwort auf die Frage