• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

[GELOEST] Problem mit PHP Session und $_SESSION

NetAktiv

Senior HTML'ler
Ich wollte bei neuen Sessions einen Counter initialisieren und den bei jedem Aufruf erhöhen. Ich meine, das hat mit dem Code unten früher geklappt. Nun aber wird bei jedem Aufruf eine neue Session erzeugt, die $_SESSION Variable liefert isset falsch. Dennoch enthält sie die nach dem Session Restart wieder die richtigen Werte. Ich nutze PHP 8.4.8 unter Windows 11 mit IIS. Der counter_2 wird erhöht, der counter_1 immer zurückgesetzt. Hat jemand eine Idee, wo da der Hase im Pfeffer liegt?

PHP:
<?php   
    $status = session_status();
    if (($status != PHP_SESSION_ACTIVE) && (!isset($_SESSION)))
    {   
        session_set_cookie_params(600);
        session_start();
        $_SESSION['status_text'] = "neue Session";
        $_SESSION['status_code'] = $status;
        $_SESSION['counter_1'] = 1;
        $_SESSION['counter_2'] = (isset($_SESSION['counter_2'])) ? ++$_SESSION['counter_2'] : 1; 
    }
    else
    {
        $_SESSION['status_text'] = "Update Session";
        $_SESSION['status_code'] = $status;
        ++$_SESSION['counter_1'];
        ++$_SESSION['counter_2'];         
    }
    $out   = "<br>" . $_SESSION['status_text'] . ": [" . $_SESSION['status_code']    . "]";
    $out  .= ", counter_1 [" . $_SESSION['counter_1'] . "]";
    $out  .= ", counter_2 [" . $_SESSION['counter_2'] . "]";
    echo $out;
?>
 
Zuletzt bearbeitet:
Ich wollte bei neuen Sessions einen Counter initialisieren und den bei jedem Aufruf erhöhen. Ich meine, das hat mit dem Code unten früher geklappt.
Und was hast du geändert? Ich würde mal darauf tippen dass es daran liegen könnte dass session_start() innerhalb des if-Blocks steht, wie soll $_SESSION im else-Block vorhanden bzw. gefüllt sein?

Ich nutze PHP 8.4.8 unter Windows 11 mit IIS.
Mein Beileid.
 
daran liegen könnte dass session_start() innerhalb des if-Blocks steht
Hallo tk1234, das hatte ich ganz vergessen, dass ich das auch geändert habe. Ich habe die Session früher immer gestartet und war nun aber der Meinung, das reicht 1x während der Sitzung aus. Da ich jahrelang nichts gemacht habe und im Moment einiges wegen Responsive Design umstellen will, ging das irgendwie unter. Egal wie, ich starte nun die Session wieder auf jeder Seite und dann passt es wieder. Hätte ich eigentlich selbst drauf kommen können/müssen. Danke auf jeden Fall.
 
PHP:
So geht es. Du startest die Session und prüfst einfach ob ein von dir definiertes Feld schon existiert.

<?php 
session_set_cookie_params(600);
session_start();
$status = session_status();

    if(!isset($_SESSION['counter_1']))
    {   
        $_SESSION['status_text'] = "neue Session";
        $_SESSION['status_code'] = $status;
        $_SESSION['counter_1'] = 1;
        $_SESSION['counter_2'] = (isset($_SESSION['counter_2'])) ? ++$_SESSION['counter_2'] : 1;
    }
    else
    {
        $_SESSION['status_text'] = "Update Session";
        $_SESSION['status_code'] = $status;
        ++$_SESSION['counter_1'];
        ++$_SESSION['counter_2'];         
    }
    $out   = "<br>" . $_SESSION['status_text'] . ": [" . $_SESSION['status_code']    . "]";
    $out  .= ", counter_1 [" . $_SESSION['counter_1'] . "]";
    $out  .= ", counter_2 [" . $_SESSION['counter_2'] . "]";
    echo $out;
?>
 
Zurück
Oben