Benjamin Baumgartner: SessionID wird bei jedem Seitenaufruf neu erzeugt

Hallo,

ich habe ein Problem:
Ich starte am Anfang des PHP Skriptes die Session
mit session_start();

Dann habe ich eine session_id() zur verfügung,
leider wird diese bei erneutem aufruf des seite
wieder neu gesetzt, kein browser geschlossen,
einfach reload der seite. ich brauche diese id
aber für den warenkorb.

zur info:
session_start(); wird in jedem script (index.php, detail.php, inbasket.php, ...) ausgeführt, da ja sonst die session_id() nicht zur verfügung steht oder?

Bitte um schnelle Antwort, Danke!!!

MfG
Benjamin Baumgartner

  1. Hallo,

    zur info:
    session_start(); wird in jedem script (index.php, detail.php, inbasket.php, ...) ausgeführt, da ja sonst die session_id() nicht zur verfügung steht oder?

    Bitte um schnelle Antwort, Danke!!!

    session_start() muss nur einmal am Anfang ausgeführt werden
    um zu verhindern dass eine neue gestartet wird obwohl sie schon gestartet wurde
    musst du prüfen ob eine session_id() schon vorhanden ist
    also
    index.php enthält

    if(!isset(session_id())) session_start();

    danach sollte die Id auf allen Seiten verfügbar sein

    romy

    MfG
    Benjamin Baumgartner

    --
    DIE ROMY AUS L. AN DER P. SAGT DANKE UND AUF WIEDERSEHEN
    1. session_start() muss nur einmal am Anfang ausgeführt werden
      um zu verhindern dass eine neue gestartet wird obwohl sie schon gestartet wurde
      musst du prüfen ob eine session_id() schon vorhanden ist
      also
      index.php enthält

      if(!isset(session_id())) session_start();

      danach sollte die Id auf allen Seiten verfügbar sein

      romy

      Hallo,
      danke für den Tip, leider bekomme ich, wenn ich deine Zeile einfüge
      einen Parse Error:

      Parse error: parse error, expecting T\_VARIABLE' or '$'' in /home/sites/site10/web/index.php on line 4

      Damit kann ich leider garnichts anfangen.

      Mfg
      benjamin baumgartner

      1. session_start() muss nur einmal am Anfang ausgeführt werden
        um zu verhindern dass eine neue gestartet wird obwohl sie schon gestartet wurde
        musst du prüfen ob eine session_id() schon vorhanden ist
        also
        index.php enthält

        if(!isset(session_id())) session_start();

        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        tschuldigung, hatte da was verhauen , Funktionen kann man ja auch nicht mit isset prüfen
        also
        $a = session_id();
        if($a == "") session_start();

        aber ich habe ja schon gelesen, dass dein Problem eh ein anderes war?

        danach sollte die Id auf allen Seiten verfügbar sein

        romy

        » Parse error: parse error, expecting T\_VARIABLE' or '$'' in /home/sites/site10/web/index.php on line 4

        Damit kann ich leider garnichts anfangen.

        kann ja jedem mal passieren, hättest du eigentlich aiuch selbst rausfinden können, was mein fehler war, oder? *g*
        naja, hoffe bei dir läufts jetzt
        romy

        Mfg
        benjamin baumgartner

        --
        DIE ROMY AUS L. AN DER P. SAGT DANKE UND AUF WIEDERSEHEN
        1. Hallo,

          nachdem ich mich nun eine Woche ziemlich intensiv mit den Sessions und einer Doku dazu beschäftigt habe, möchte ich auch ein wenig Senf ablassen:

          session_start() muss nur einmal am Anfang ausgeführt werden

          session_start() muss auf _jeder_ Seite erneut im (HTTP-)Header-Bereich des Skriptes (nicht im <head>-Bereich!) noch vor jeder Ausgabe (alles das, was später im Browser-Quelltext landet) aufgerufen werden. Man sollte vorher $oldname=session_name("neuername"); aufrufen, wenn man den Standardnamen (PHPSESSID) nicht wünscht. Wenn eine _neue_ Session gestartet wurde, ist SID (Konstante) gesetzt und gefüllt.

          if (defined("SID") and strlen(SID) > 32)
          {
            echo "Session ".SID." wurde neu gestartet";
          }

          if (!defined("SID")
          {
            echo "Für dieses Skript gibt es (noch) keine Session-Verbindung";
          }

          Und wenn SID definiert ist und trotzdem leer (SID==""), dann bestand schon eine Session-Verbindung, die durch session_start() wieder aufgenommen wurde.

          Ich hoffe, nun kommst Du einen Schritt weiter.

          um zu verhindern dass eine neue gestartet wird obwohl sie schon gestartet wurde
          musst du prüfen ob eine session_id() schon vorhanden ist

          Die Funktion session_id() liefert erst _nach_ Aufruf von session_start() ein gültiges Ergebnis.

          Liebe Grüße aus <http//www.braunschweig.de>

          Tom

  2. Hallo,

    Ich starte am Anfang des PHP Skriptes die Session
    mit session_start();

    Dann habe ich eine session_id() zur verfügung,
    leider wird diese bei erneutem aufruf des seite
    wieder neu gesetzt, kein browser geschlossen,
    einfach reload der seite. ich brauche diese id
    aber für den warenkorb.

    Probier doch mal folgendes einfache Skript zum Testen Deiner Sessions:

    ===============================
    <?php
       session_start();

    if (!isset($_SESSION['counter']))
          $_SESSION['counter'] = 1 ;
       else
          $_SESSION['counter']++;
    ?>

    <html><head><title>Testscript</title></head><body>

    <h1>Counter:</h1>
    <p>Anzahl der Aufrufe: <strong><? echo $_SESSION['counter']; ?></strong></p>
    <a href="<? echo $_SERVER['PHP_SELF']; ?>">++</a><br>
    <a href="<? echo $_SERVER['PHP_SELF'].'?'.session_name().'='.session_id(); ?>">++</a>
    </body></html>

    Wenn Cookies aktiviert sind, sollte der Zähler bei einem Reload erhöht werden.
    Sind sie es nicht, dann hängt im Falle von 'session.use_trans_sid = true' PHP an den ersten Link automatisch die SessionID. Andernfalls sollte der zweite Link zum gewünschten Ergebnis führen.

    So kannst Du testen, ob Sessions generell Problemlos funktionieren. Wenn ja, dann liegt Dein spezielles Problem imho tiefer im Code versteckt.

    [...]

    Gruß Alex

    1. Hallo,

      Probier doch mal folgendes einfache Skript zum Testen Deiner Sessions:

      ===============================
      <?php
         session_start();

      if (!isset($_SESSION['counter']))
            $_SESSION['counter'] = 1 ;
         else
            $_SESSION['counter']++;
      ?>

      <html><head><title>Testscript</title></head><body>

      <h1>Counter:</h1>
      <p>Anzahl der Aufrufe: <strong><? echo $_SESSION['counter']; ?></strong></p>
      <a href="<? echo $_SERVER['PHP_SELF']; ?>">++</a><br>
      <a href="<? echo $_SERVER['PHP_SELF'].'?'.session_name().'='.session_id(); ?>">++</a>
      </body></html>

      Wenn Cookies aktiviert sind, sollte der Zähler bei einem Reload erhöht werden.
      Sind sie es nicht, dann hängt im Falle von 'session.use_trans_sid = true' PHP an den ersten Link automatisch die SessionID. Andernfalls sollte der zweite Link zum gewünschten Ergebnis führen.

      So kannst Du testen, ob Sessions generell Problemlos funktionieren. Wenn ja, dann liegt Dein spezielles Problem imho tiefer im Code versteckt.

      [...]

      Gruß Alex

      Hallo,

      danke für deinen Tip, beide Links erhöhen den Counter NICHT.
      Liegt das jetzt dann an den Cookies? Die wären aber nicht deaktiviert.

      Hier mal die URL für die PHPINFO´s
      http://www.officewall.de/test.php

      Vielleicht kann ja jemand daraus was erkennen.
      Vielen Dank!

      Gruß
      Benjamin Baumgartner

      1. Hallo,

        [sessionhitcounterskript]

        danke für deinen Tip, beide Links erhöhen den Counter NICHT.
        Liegt das jetzt dann an den Cookies? Die wären aber nicht deaktiviert.

        Hier mal die URL für die PHPINFO´s
        http://www.officewall.de/test.php

        session.use_cookies       Off         Off

        Das bedeutet, es werden überhaupt keine Cookies verwendet. Trotzdem sollte wenigstens der zweite Link funktionieren.

        Wo ist denn das Testskript online zu bestaunen?

        Gruß Alex

  3. Ist dein Prob gelöst?
    Wenn nicht welches OS nutzt du?

    Ich hatte ein ganz ähnliches Problem, weil in der php.ini
    session.save_handler = files gesetzt war, aber der Pfad nicht gestimmt hat (session.save_path).

    Kann das die Ursache sein?

    greets
    bx