hasenfuss: session_start(), variablenübergabe, reload ,verliert wert

hi,

ok folgendes:

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

****************seite1.php
ob_start();
session_start();
session_register();
<a href="seite2.php?interpreter='.$ergeb[1].'">'.$ergeb[1].'</a>

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

****************seite2.php

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

**********************

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

ok lasse ich session_start() also mal weg, dann steht variable $interpreter zu verfügung.
echo "$interpreter";

reloade ich die seite (seite2.php), wird die variable gelöscht (anzeige: nix).
Also nehme ich an, daß ich vorher ein:
session_register("interpreter");
setzen müßte, oder wie ??

danke

hasenfuss

  1. Hallo Hasenfuss,

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

    Ja, aber nur wenn Du auch die gleiche Session wieder startest. So wie du es machst, wird eine neue Session gestartet.

    1. Datei:

    session_start();
    $sid = session_id();

    Aufruf der 2. Datei:

    <a href="datei2.php?var=deinevar&sid=&sid>2. Datei</a>

    In der 2. Datei:

    session_start($sid);

    Gruß
    Susanne

    1. cool, danke...

      hasenfuss

    2. Moin!

      Ja, aber nur wenn Du auch die gleiche Session wieder startest. So wie du es machst, wird eine neue Session gestartet.

      Nein, nicht zwingend.

      session_start() generiert eine Session-ID, versucht beim Seitenladen der Seite 1 ein Cookie zu setzen, und wenn trans_sid eingeschaltet ist, wird an alle HTML-Links und Formulare die Session-ID (zusammen mit dem Session-Namen) auch noch drangehängt. Ganz automatisch.

      Zumindest wenn die Session Cookies verwendet (ist Standard, kann aber abgeschaltet werden) und diese vom Browser akzeptiert werden, wird auf der Seite 2 in jedem Fall _dieselbe_ Session fortgesetzt.

      1. Datei:

      session_start();
      $sid = session_id();

      Aufruf der 2. Datei:

      <a href="datei2.php?var=deinevar&sid=&sid>2. Datei</a>

      Damit machst du etwas kompliziert, was auch ganz einfach gehen könnte.

      session_start($sid);

      Das Übergeben der zu wählenden Session-ID ist überflüssig.

      - 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>)
  2. Moin,

    also, wenn du möchtest, dass deine Session die Variable $interpreter denn auch kennt, mußt du ihr das auch bekannt geben. So du denn eine PHP-Version >= 4.1.0 benutzt, was ich hoffe, geht das ohne session_register() - das ohne jeden Parameter übrigens gar nix registriert. Benutze stattdessen das superglobale Array $_SESSION.
    session_start();
    $interpreter = 'was auch immer';
    $_SESSION['interpreter'] = $interpreter;

    Gruß, Uschi

  3. 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>)
    1. Hello,

      1. Wenn schon (aufgrund einer alten PHP 4.0.x-Version): session_register($variable), damit die Variable $variable auf der zweiten Seite wiederhergestellt wird.

      Wenn ich mich recht entsinne, übergibt man session_register() nicht die Adresse der Variablen sondern nur ihren Namen als String:

      session_register('variable');

      Und deshalb sollte man lieber gleich

      $_SESSION['variable'] = "Wert";   schreiben. Aber das hat Sven ja schon gesagt.

      Grüße

      Tom

      1. Moin!

        Wenn ich mich recht entsinne, übergibt man session_register() nicht die Adresse der Variablen sondern nur ihren Namen als String:

        session_register('variable');

        Stimmt, das war falsch.

        Merkt man, dass ich schon lange das hier benutze? :)

        $_SESSION['variable'] = "Wert";

        - 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>)
        1. Hello,

          Wenn ich mich recht entsinne, übergibt man session_register() nicht die Adresse der Variablen sondern nur ihren Namen als String:

          session_register('variable');

          Stimmt, das war falsch.
          Merkt man, dass ich schon lange das hier benutze? :)

          $_SESSION['variable'] = "Wert";

          Ging mir aber genauso. Da klingelte nur ganz leise was im Hinterhirn. Ich hab auch extra nochmal nachgeschaut. Aber das deutsche Manual ist auch nicht immer richtig. Sicher sein kann man da nie...

          Grüße

          Tom