Daniel: Session

Hi,
das $_SESSION[] ist ja ein array, das heißt wenn ich :

$_SESSION = null;

mache werden alle Session Variablen gelöscht, oder??

MfG

  1. Hi,

    wenn ich :
    $_SESSION = null;
    mache werden alle Session Variablen gelöscht, oder??

    ich weiß nicht, ob das der Standard ist, aber ich mach es so:

    session_unregister("variable");

    Und um die Session zu verlassen:

    session_destroy();

    --
    "It's amazing I won. I was running against peace, prosperity, and incumbency."
    George W. Bush speaking to Swedish Prime Minister unaware a live television camera was still rolling, June 14, 2001
    1. Hello,

      session_unregister() ist out und sollte nicht mehr verwendet werden.

      Außerdem löscht es nicht die Sessionvariable als solche. Es Nimmt die Variable aus der Liste der zu speichernden oder woederherzustellenden Variablen heraus.

      Harzliche Grüße aus http://www.annerschbarrich.de

      Tom

      --
      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
      Nur selber lernen macht schlau
      1. Hi,

        session_unregister() ist out und sollte nicht mehr verwendet werden.

        ist es überhaupt nötig, eine Session-Variable zu löschen, wenn man sofort danach session_destroy() aufruft?

        MfG Hopsel

        --
        "It's amazing I won. I was running against peace, prosperity, and incumbency."
        George W. Bush speaking to Swedish Prime Minister unaware a live television camera was still rolling, June 14, 2001
        1. Hello,

          session_unregister() ist out und sollte nicht mehr verwendet werden.

          ist es überhaupt nötig, eine Session-Variable zu löschen, wenn man sofort danach session_destroy() aufruft?

          Das vermag ich pauschal nicht zu beantworten.

          Das Manual schreibt in seiner berühmt missverständlichen Art mal wieder nur Verwirrendes:

          <cite>
          session_destroy() löscht alle in Verbindung mit der aktuellen Session stehenden Daten.
          Mit der Session zusammenhängende globale Variablen und das Session-Cookie werden nicht gelöscht.
          </cite>

          Soweit ich mich erinnere, wird aber nur die Session-DATEI gelöscht und nicht $_SESSION und $_COOKIE.

          Wenn Dein Script also nach dem session_destroy() noch ein wenig weiterarbeitet und ggf. Abfragen, wie if (isset($_SESSION['elementname'])) durchführt, solltest Du immer auf "Nummer Sicher" gehen und ein

          $_SESSION = array();

          benutzen.

          Wenn das Script nun ordnungsgemäß endet, sollte das neue Array (im Moment leer) auch in die Sessiondatei exportiert werden, und zwar, indem diese damit _überschrieben_ wird.

          Harzliche Grüße aus http://www.annerschbarrich.de

          Tom

          --
          Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
          Nur selber lernen macht schlau
          1. Moin!

            session_unregister() ist out und sollte nicht mehr verwendet werden.

            ist es überhaupt nötig, eine Session-Variable zu löschen, wenn man sofort danach session_destroy() aufruft?

            Das vermag ich pauschal nicht zu beantworten.

            Es ist nach meinem Dafürhalten unnötig, session_destroy() aufzurufen und/oder das Session-Cookie beim User zu löschen.

            Annahme: Man verwendet den modernen Ansatz mittels $_SESSION, keine alten Methoden.

            Begründung: Ein Löschen der Sessionvariablen über $_SESSION = array() ist mit dem Ende des Skriptes vollständig und wirksam. Jeglicher weiterer Request wird unweigerlich ein leeres Array vorfinden - eine Situation, die absolut identisch ist mit der, die man direkt nach dem Start einer neuen, bislang unbekannten Session vorfindet.

            Dem User sein Session-Cookie zu entziehen ist unsinnig. Bei dem Cookie handelt es sich ja um eine eindeutige, auf die Zeit des Besuchs begrenzte Identifikation. Verläßt der Benutzer die Site und kommt später wieder, so ist es bei gelöschter Session-Variablen absolut uninteressant, ob dieser Benutzer nun dasselbe oder ein anderes neues Cookie kriegt. In beiden Fällen liegt wieder eine jungfräuliche Session ohne Vorbelegung vor. Die Garbage Collection von PHP, welche nach einem Zufallsfaktor mehr oder weniger regelmäßig zu alte Sessiondateien löscht, dient im Prinzip nur dazu, dass sich in diesem Verzeichnis nicht irgendwann Millionen von Dateien ansammeln - der Zugriff des Dateisystems würde dabei nämlich extrem verlangsamt werden.

            Auch sollte man ja die Existenz einer Session nicht schon als Kriterium für "ich bin irgendwo eingeloggt" nehmen. Insofern muß es bei gut programmierten Projekten sogar egal sein, ob eine Session bereits existiert hat bzw. ein Session-Cookie übermittelt wurde, oder noch nicht.

            Das Manual schreibt in seiner berühmt missverständlichen Art mal wieder nur Verwirrendes:

            <cite>
            session_destroy() löscht alle in Verbindung mit der aktuellen Session stehenden Daten.
            Mit der Session zusammenhängende globale Variablen und das Session-Cookie werden nicht gelöscht.
            </cite>

            Der einzige Punkt, bei dem ich session_destroy() nachvollziehbar eingesetzt sehen könnte, wäre beim Aspekt der Gleichzeitigkeit gegeben. Es ist ja problemlos möglich, während der Laufzeit des ersten, sessionlöschenden Skriptes ein zweites aufzurufen. Dieses wird beim Start die noch ungelöschten Sessiondaten einlesen, während dessen Laufzeit wird dann die Session geleert (array() zugewiesen) und durch Skriptende des ersten Skriptes auch gespeichert, und dann erst ist das zweite Skript beendet und speichert den innerhalb dieses Skriptes kaum veränderten Zustand von $_SESSION wieder ab.

            Dieses Problem existiert allerdings mit oder ohne session_destroy() genauso. Denn ob ich durch das zuerst gestartete Skript nun die Sessiondatei leere oder lösche, ist zum Zeitpunkt des zweiten Skriptendes wahrscheinlich ziemlich egal, weil die Sessiondatei entweder nur mit neuem Inhalt gefüllt oder komplett neu angelegt wird.

            • Sven Rautenberg
  2. Hello,

    Hi,
    das $_SESSION[] ist ja ein array, das heißt wenn ich :

    $_SESSION = null;

    mache werden alle Session Variablen gelöscht, oder??

    Dann würden alle Session-Variablen innerhalb des Scriptes gelöscht. In der Session-Datei stehen die dann noch solange, bis das Script ordnungsgemäß endet oder verlassen wird, also nicht "abstürzt".

    Außerdem bleibt noch der Cookie beim User bestehen, der beim nächten Request dieselbe Sessionnummer wieder übertragen würde, was zum Neuerstellen oder Wiederaufruf der Sessiondatei führt.

    Ich würde aus Kompatibilitätsgründen außerdem

    $_SESSION = array();

    schreiben. Das würde ein leeres Session-Array erzeugen.

    Harzliche Grüße aus http://www.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau