$_SESSION['start'] vs. $start unerklärliches Verhalten

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Antworten
Xwitz
Mitglied
Beiträge: 1104
Registriert: 21.06.2005 21:41

$_SESSION['start'] vs. $start unerklärliches Verhalten

Beitrag von Xwitz »

Hallo,

unten geposteter code (Auszug aus 300 Zeilen) liefert beim ersten Aufruf ein Formular, beim zweiten Aufruf (mittels button) ein Formular und den timestamp und beim dritten Aufruf (mittels button) ein Formular und eine Null.
<?php
error_reporting(E_ALL);
if(isset($_POST['modus'])) {
session_start();
if(!isset($_SESSION['start'])) {
$_SESSION['start'] = time();
}
}

$start = 0;

?>
<form action="index4.php" name="test" method="post" accept-charset="ISO-8859-1">
<input name="eingabe" type="text" size="40" maxlength="100"><br>
<input type="submit" value="test">
<input type="hidden" name="modus" value="1">
</form>
<?php
if(isset($_SESSION['start'])) {
echo $_SESSION['start'];
}
?>
Ich kann mir dieses Verhalten nicht erklären. Offenbar überschreibt das $start = 0; die $_SESSION['start'] aber auch nur, wenn diese bei diesem Aufruf vorher :o nicht "frisch" beschrieben wurde (oder die Session selbst nicht "frisch" ist).

Ich kann es eigentlich nicht glauben, irgendeine Erklärung dafür?
Benutzeravatar
killerbees19
Mitglied
Beiträge: 1185
Registriert: 09.05.2006 17:33
Wohnort: Wien (Österreich)
Kontaktdaten:

Beitrag von killerbees19 »

Hast du vielleicht REGISTER GLOBALS auf ON?


MfG Christian
» Real programmers don't comment. If it was hard to write, it should be hard to understand!
Xwitz
Mitglied
Beiträge: 1104
Registriert: 21.06.2005 21:41

Beitrag von Xwitz »

Sorry, ich konnte gestern nicht mehr reinschauen.

Ja, ist auf on (shared server).

Kann man dann etwa was per Formular in $_SESSION[''] schreiben? Das würde das System Sessions doch ad absurdum führen, weil man die schließlich nicht bei jedem Aufruf initialisieren will, sondern die Informationen nutzen. Außerdem würde das nicht den Unterschied zwischen dem zweitem und dritten Aufruf erklären oder?

PS: Ich habe es jetzt local auf off gesetzt und jetzt wird auch beim dritten Aufruf der timestamp ausgegeben. Ich verstehe das Verhalten trotzdem nicht.
Benutzeravatar
killerbees19
Mitglied
Beiträge: 1185
Registriert: 09.05.2006 17:33
Wohnort: Wien (Österreich)
Kontaktdaten:

Beitrag von killerbees19 »

Um es einmal kurz zu erklären: Register Globals macht Variablen aus Post, Get, usw... Global verfügbar.

Beispiel:

Code: Alles auswählen

$_POST['test'] ist auch als $test verfügbar
Dadurch ist wohl $_SESSION['start'] auch als $start verfügbar, wenn du den einen Wert also änderst, wird der andere auch geändert.

Die Empfehlung für Register Globals ist übrigens, es immer auzuschalten ;-)


MfG Christian
» Real programmers don't comment. If it was hard to write, it should be hard to understand!
Xwitz
Mitglied
Beiträge: 1104
Registriert: 21.06.2005 21:41

Beitrag von Xwitz »

Was register_globals on grundsätzlich macht, ist mir bekannt. Ich hätte nur nicht gedacht, daß man dann die Session-Variablen von außen überschreiben kann.

Es erklärt aber nicht, warum beim zweiten Aufruf (bei register_globals on) der timestamp noch in der $_SESSION['start'] steht obwohl nach der Zuweisung ein $start = 0; ausgeführt wurde.

Dieser Code:

Code: Alles auswählen

<?php
    error_reporting(E_ALL);
     $_SESSION['start'] = time();

$start = 0;

?>
<form action="index4.php" name="test" method="post" accept-charset="ISO-8859-1">
<input name="eingabe" type="text" size="40" maxlength="100"><br>
<input type="submit" value="test">
<input type="hidden" name="modus" value="1">
</form>
<?php
echo $_SESSION['start'];
?>
... gibt auch immer den timestamp aus, auch beim x-ten Aufruf.
Antworten

Zurück zu „Coding & Technik“