Sven Rautenberg: session_start(), variablenübergabe, reload ,verliert wert

Beitrag lesen

Moin!

ich übergebe von seite1.php eine variable an die z.B. seite2.php:

****************seite1.php
ob_start();

Warum dieses?

session_start();

Ok.

session_register();

session_register() wendet man anders an.

1. Man sollte es sowieso gar nicht mehr verwenden.
2. Wenn schon (aufgrund einer alten PHP 4.0.x-Version): session_register($variable), damit die Variable $variable auf der zweiten Seite wiederhergestellt wird.

<a href="seite2.php?interpreter='.$ergeb[1].'">'.$ergeb[1].'</a>

Ok.

die variable: $interpreter, steht aber nur zu verfügung, wenn ich kein session_start(); im script: seite2.php verwende:

Seit PHP 4.1 stehen dir alle Parameter, die du in URLs übergibst, in der superglobalen Variablen $_GET zur Verfügung.

Benutze also $_GET['interpreter'] als Zugriff.

Außerdem: Wenn du $interpreter als Session-Variable registriert hast (sollte man ja aber nicht tun), dann löscht dir session_start() die Variable bzw. stellt erst zu diesem Zeitpunkt den Inhalt aus der Session wieder her. Wenn du parallel dieselbe Variable per URL übergibst, führt das zu Konflikten.

echo "Vor session_start(): $interpreter";

session_start(); //<------ nur ohne ?!
echo "INTERPRETER: $interpreter";

Das könnte unterschiedliche Ergebnisse haben.

Aber wichtig: Du verläßt dich hier auf ein PHP-Feature, das dir künftig immer seltener zur Verfügung steht: Der URL-Parameter "interpreter" wird in Zukunft nicht mehr automatisch in eine Variable $interpreter gewandelt, sondern _nur noch_ in $_GET['interpreter'] abgelegt. POST-Formularfelder werden dann ebenfalls nicht mehr nur in $formularfeldname abgelegt, sondern in $_POST['formularfeldname'].

setzt session_start(); nicht eine bereits gestartete (seite1.php)session fort ?

Ja, sofern Seite 2 irgendwie die Session-ID zu wissen kriegt. Am sinnvollsten per Cookie (Hast du die erlaubt? Kommen die an?), aber ansonsten auch per URL-Parameter.

Also nehme ich an, daß ich vorher ein:
session_register("interpreter");
setzen müßte, oder wie ??

Es gibt seit PHP 4.1 eine superglobale Variable $_SESSION, welche mit dem Befehl session_start() auf den letzten gespeicherten Stand gebracht wird (am Anfang ist sie natürlich leer) und mit Skriptende wieder gespeichert wird (inkl. aller neuen Daten und Änderungen).

In diese Variable tust du alle Werte rein (sinnvollerweise als Array), die du in der Session übertragen willst:

$_SESSION['mein_interpreter'] = "irgendein Text";

Das speichert in der Session den Text, der bis zu einer Änderung dann auf jeder Seite zur Verfügung steht, nachdem session_start() ausgeführt wurde.

- Sven Rautenberg

--
"Beim Stuff für's Web gibts kein Material, was sonst das Zeugs ist, aus dem die Sachen sind."
(fastix®, 13. Oktober 2003, 02:26 Uhr -> </archiv/2003/10/60137/#m338340>)