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