andre: session variablen

hi,
ich arbeite gerade an einem kleinen php warenkorb-system ohne datenbank.
ich möchte die bestell-daten mittels session-funktion in registrieten variablen nutzen.
mein problem:
wird eine neue seite aufgerufen ist der inhalt der variable weg.
session ist ordnungsgemäss gestartet (sesssion_start() vor html-code).
ich arbeite mit session_set_cookie = 1.
xxx.xxx<?=sid?> erzeugt bei mir ein forbidden auf dem link...

hat jemand eine idee?
ich bastel schon tage an diesm problem und habe auch schon einige bucher gewälzt.
ich wiess echt nich mehr weiter.

gruss aus hamburg,
andre

win 2000
apache 1.3.22

  1. Hallo!

    wird eine neue seite aufgerufen ist der inhalt der variable weg.

    Du mußt auf jeder Seite die Session starten und die Variablen bekannt machen.

    //seite1.php
    session_register("variable1", "variable2", "usw");

    // eine_andere_seite.php
    session_register("variable1", "variable2", "usw");

    Nur session_start(), liefrt nur eine Session-ID.

    session_start() ist nicht nötig, da dies auch session_register() tut. Über den Cookie schleppst Du die Session-ID mit. PHP weiss also über den Cookie, welche Session bei "eine_andere_seite.php" zu verwenden ist.

    xxx.xxx<?=sid?> erzeugt bei mir ein forbidden auf dem link...

    Die Konstante SID kommt ja erst in Aktion, wenn Cookies deaktiviert sind. Die Session-ID wird dann über GET mitgeschleppt und ist auf einer anderen Seite bekannt.

    MfG, André Laugks

    1. Moin

      Du mußt auf jeder Seite die Session starten und die Variablen bekannt machen.

      Der letzte Teil ist nicht wahr. Wenn die Session wiederhergestellt wird, werden automagisch alle in der Session registrierten Variablen wiederhergestellt. Alles andere wäre ja auch recht sinnfrei.

      session_start() ist nicht nötig, da dies auch session_register() tut. Über den Cookie schleppst Du die Session-ID mit. PHP weiss also über den Cookie, welche Session bei "eine_andere_seite.php" zu verwenden ist.

      Jepp, nur musst du session_register() nicht unbedingt aufrufen. Tu also einfach ein session_start() an den Anfang all deiner Skripte und werde glücklich. Wenn session.auto_start (http://www.php.net/manual/de/ref.session.php#AEN63760)  in der PHP-Konfiguration aktiviert ist, brauchst du nichtmal mehr das zu tun. (Allerdings kannst und solltest du dich darauf nicht verlassen)

      xxx.xxx<?=sid?> erzeugt bei mir ein forbidden auf dem link...

      Hmm, Code und/oder URL wären nützlich. Aber eigentlich sollte session_start() am Anfang jedes Skriptes dein Problem lösen.

      Anmerkung: Evt. spielt dir auch ein dein Browser-Cache einen Streich? PHP-Sessions senden zwar automatisch Header die das Cachen verhindern, aber es könnte sein dass du noch eine Version deiner Skriptausgaben siehst, von einer Zeit bevor du Sessions eingebaut hast.

      --
      Henryk Plötz
      Grüße aus Berlin

      1. Hallo!

        Der letzte Teil ist nicht wahr. Wenn die Session wiederhergestellt wird, werden automagisch alle in der Session registrierten Variablen wiederhergestellt. Alles andere wäre ja auch recht sinnfrei.

        Uppss :-), ist das schon immer so? Ich meine gelesen zu haben, als ich mit der Sessionverwaltung angefangen habe zu arbeiten (seit PHP 4.0.0 arbeite ich damit), das session_register() auf jeder Seite, auf der die Variablen genutzt werden sollen, die Variablen über session_register() anzumelden, damit sie im "Variablen-Raum" bekannt sind.

        Ich habe es eben auch mal getestet..., geht ohne session_register(). Ich werde der Sache aber mal nachgehen.

        MfG, André Laugks

        1. Hi!

          Uppss :-), ist das schon immer so? Ich meine gelesen zu haben, als ich mit der Sessionverwaltung angefangen habe zu arbeiten (seit PHP 4.0.0 arbeite ich damit), das session_register() auf jeder Seite, auf der die Variablen genutzt werden sollen, die Variablen über session_register() anzumelden, damit sie im "Variablen-Raum" bekannt sind.

          Das ist sogar sehr dumm wenn Du das machst, denn mit Session_register sorgst Du dafür, das die Variablen am Ende des Scriptes mit dem letzten Wert der Variable überschrieben werden, das sollte man wenn aber nur bewußt machen und nicht immer(finde ich)!

          Ich habe es eben auch mal getestet..., geht ohne session_register(). Ich werde der Sache aber mal nachgehen.

          Steht schön erklärt in den PHP-FAQ: http://www.php-center.de/faq/faq-version4_session.html#version4_session-1
          Auch die Links in meine beiden obigen Postings soind interesant(manual und noch was anderes)

          Grüsse
            Andreas

          1. Hallo!

            Das ist sogar sehr dumm wenn Du das machst, denn mit Session_register sorgst Du dafür, das die Variablen am Ende des Scriptes mit dem letzten Wert der Variable überschrieben werden, das sollte man wenn aber nur bewußt machen und nicht immer(finde ich)!

            Mir ist durch, daß ich session_regsiter() auf jeder Seite aufgerufen habe, noch nie ein Variableninhalt abhanden gekommen, geschweige durch irgendwas überschrieben, außer ich habe den Inhalt geändert.

            Wenn ich die nich antaste, werden sie auch nicht geändert.

            MfG, André Laugks

    2. Hi!
      Wenn Du das selbst installiert hast, kann es auch eine Fehlerquelle sein, dass Du in der PHP.ini kein Temp Verzeichnis für Sessionsaten angegeben hast, oder Sessions gar nicht aktiviert sind.
      Sonst kann ich mich Andre nur anchließen!
      Ich verstehe nicht warum Du Session-Cookies erst explizit aktivierst(was eh automatisch gemacht wird), und dann zusätzlich alles per GET übergeben willst. Außerdem hast Du im Posting Sesssion mit 4s geschrieben:)
      Aber eine Frage habe ich selbst an Andre, den Session-Guru hier im Forum:-)
      Ich würde am liebsten kpl. auf Session-Cookies verzichten, das mache ich doch am besten so:
      ini_set('session.use_cookies', 0);

      immer vor
      session_start();

      richtig?
      die Links dann alle mit
      <a href="link.php?<? echo SID ?>">weiter</a>

      was ist der Unterschied zu
      <a href="link.php?<?=SID?>">weiter</a>

      Warum einmal echo und einmal nicht? Beides aus verschiedenen Anleitungen.

      Wie mache ich das dann bei Formularen mit Post?
      <input type="hidden" name="<? echo session_name()?>" value="<? echo session_id() ?>">
      Geht das nicht einfacher?

      Grüße
        Andreas

      PS: Ich bin übrigens auf einen guten Artikel zum Thema Sessions gestoßen: http://www.infoweek.ch/archive/a_single.cfm?artikelx=6210 (und im Manual findest Du natürlich auch einges zum Thema!)

      1. Moin

        Aber eine Frage habe ich selbst an Andre, den Session-Guru hier im Forum:-)
        Ich würde am liebsten kpl. auf Session-Cookies verzichten, das mache ich doch am besten so:
        ini_set('session.use_cookies', 0);

        jepp, alternativ kannst du das auch in deiner .htaccess setzen, wenn der Serververwalter das freigegeben hat, oder gleich in der httpd.conf oder php.ini.

        <a href="link.php?<? echo SID ?>">weiter</a>
        was ist der Unterschied zu
        <a href="link.php?<?=SID?>">weiter</a>

        <?= ausdruck ?> ist ein Alias für <?php echo ausdruck; ?> mit der unschönen Eigenschaft dass er nicht immer funktioniert: http://www.php.net/manual/de/language.basic-syntax.php#language.basic-syntax.phpmode
        Fazit: immer <?php ?> verwenden, alles andere ist von der Konfiguration abhängig oder nicht XML-konform (wofür auch immer man das haben möchte :).

        Geht das nicht einfacher?

        Wenn das trans-sid-Feature aktiviert ist, macht PHP das automagisch für dich.

        --
        Henryk Plötz
        Grüße aus Berlin

        1. Hi!

          <a href="link.php?<? echo SID ?>">weiter</a>
          was ist der Unterschied zu
          <a href="link.php?<?=SID?>">weiter</a>

          <?= ausdruck ?> ist ein Alias für <?php echo ausdruck; ?> mit der unschönen Eigenschaft dass er nicht immer funktioniert: http://www.php.net/manual/de/language.basic-syntax.php#language.basic-syntax.phpmode

          Was nur etwas verwirrend ist ist die Tatsachem das die erste Version gerade aus besagtem Manual von der Session-Seite kommt!

          Fazit: immer <?php ?> verwenden, alles andere ist von der Konfiguration abhängig oder nicht XML-konform (wofür auch immer man das haben möchte :).

          Geht das nicht einfacher?

          Ich meinte ´jetzt die Übertragung über POST wenn ich trans-sid OFF habe!

          Wenn das trans-sid-Feature aktiviert ist, macht PHP das automagisch für dich.

          Kann ich das verwenden _und_ Cookies abschalten, so dass das automatisch geht, oder lieber nicht?

          Grüße
            Andreas

          1. Was nur etwas verwirrend ist ist die Tatsachem das die erste

            ---------------------------------------------^---------^^^^^
                                                    Tatsache          zweite

            Version gerade aus besagtem Manual von der Session-Seite kommt!

            http://www.dynamicwebpages.de/php/ref.session.php
            (Ich weiß, nicht das Original, aber die Formatierung ist besser!)

            Grüße
              Andreas

      2. Hallo!

        Aber eine Frage habe ich selbst an Andre, den Session-Guru hier im Forum:-)

        Ich glaube jetzt nicht mehr! ;-)
        erster Absatz: http://forum.de.selfhtml.org/?m=27498&t=4894

        Ich würde am liebsten kpl. auf Session-Cookies verzichten, das mache ich doch am besten so:

        Henryk hat ja schon alles gesagt dazu.

        Wie mache ich das dann bei Formularen mit Post?
        <input type="hidden" name="<? echo session_name()?>" value="<? echo session_id() ?>">
        Geht das nicht einfacher?

        Wie auch schon gesagt, mit trans-sid. Muß aber mit installiert sein. Auch wenn es nicht installiert wurde, steht es in der php.ini mit 1|true. Du kannst es in der php.ini bei "Configure Command" sehen (--enable-trans-sid), ob es mit installiert wurde.

        Ich habe aber schon festgestellt, daß es bei Formularen nicht immer einfügt.

        Seit kurzem wird ein Hidden-Feld eingefügt. Keine Ahnung seit welcher Version, ich vermute mal seit 4.1.*.
        <form action="weiter.phtml" method="post"><input type="hidden" name="PHPSESSID" value="07bbbdba4e5964722dded30636bbb51f" />
        .
        .
        .
        </form>

        MfG, André Laugks

    3. Viiieeeelen Dank!
      Wenn ich mal richtig fitt auf PHP bin, komme ich zrück und
      helfe andreren Anfängern!
      Nun klapt es!!!!

      :-)

      gruss
      Andre D