Seite 1 von 1

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

Verfasst: 15.08.2007 16:12
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?

Verfasst: 15.08.2007 17:03
von killerbees19
Hast du vielleicht REGISTER GLOBALS auf ON?


MfG Christian

Verfasst: 16.08.2007 10:54
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.

Verfasst: 16.08.2007 14:13
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

Verfasst: 16.08.2007 17:04
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.