schildi: vorhandene sessionvariable überschreiben

hallo,

ich würde gerne wissen, ob eine vorhandene sessionvariable überschrieben wird, wenn man sie neu setzt.

in meinem skripüt sieht es nämlich sehr danach aus, das dies nicht der fall ist, sondern das, wenn eine sessionvariable bereits besteht und man versuchst diese zu überschreiben mit session_register, dies ignoriert wird.

wenn ich vorher die variable 'unregister', dann kann ich die variable neu setzen.

geht das auch einfacher? oder muss ich jedesmal die entsprechenden variablen deregistrieren?

  1. hallo,

    [....]

    geht das auch einfacher? oder muss ich jedesmal die entsprechenden variablen deregistrieren?

    ist mir leider auch ncihts gegenteiliges bekannt.
    selbe problem wie in einem array, was in dem sinn ja aucdh eine session ist (print_r $_session)

    1. Hallo beide,

      Vielen Dank für Eure Antworten.

      Also woran das liegt habe ich nicht herausgefunden.

      Ich habe allerdings dann auf $_SESSION umgestellt und alles läuft wunderbar!

      Vielen Dank nochmals!

      1. Da fällt mir noch was ein:

        //alle meine sessionvars löschen
        foreach($_SESSION as $k=>$v)
        {
           unset($_SESSION[$k]);
        }

        Ginge das, oder werden dann auch wie es bei unset($_SESSION) wäre, die superglobale gelöscht?

        1. Noch eine Frage:

          Wieso wird beim öffnen eines neuen fenster eine neue sessionvariable erzeugt?

          1. Hall Till,

            Wieso wird beim öffnen eines neuen fenster eine neue sessionvariable erzeugt?

            Zu jedem Fenster auf dem Frontend, das nicht durch JS o.ä. erzeugt wurde, sondern das Ergebnis eines Requests ist, gehört serverseitig ein Script (HTML, CGI oder PHP o.ä.).

            Beim Aufruf eines PHPscripts werden standardmäßig bestimmte Dinge geprüft:

            Wurden globale Varibalen übergeben?
            Gibt es schon einen globalen Variablenbereich?
            Welche Variablen können dem Environment entnommen werden -> Übertragung

            Wird eine Session verlangt?
            Besteht schon eine?
             nein: Initialisierung von $_SESSION und $_COOKIE
             ja: $_COOKIE auslesen und die Sessiondatei suchen
               vorhanden: $_SESSION mit dem Inhalt der Datei füllen
               nv: Sessiondatei anlegen und die Nummer in $_COOKIE eintragen

            Das bedeutet, erst nach dem Aufruf von session_start() hat man bezüglich der $_SESSION und er S_COOKIE-Variablen "stabile" Zustände.

            Wenn man z.B. eine alte Session wieder aufnehmen will, muss man nur den Session-Cookie ($_COOKIE["PHPSESSID"]) mit dem Namen der Sessiondatei fillen, bevor man session_start() aufruft. Man ist dann allerdings selbst dafür verantwortlich, das dem Client durch explizites senden des "Session_Cookies" auch noch mitzuteilen. Diese Vorgehensweise kommt immer dann in Betracht, wenn man dem Sessionstart ein qualifiziertes Login (Username-Passwort) vorausgehen lassen will, also User ohne Login auch keine Session bekommen.

            LG

            der blanke Hans

        2. Hallo,

          //alle meine sessionvars löschen
          foreach($_SESSION as $k=>$v)
          {
             unset($_SESSION[$k]);
          }

          Warum so komliziert?

          Nun hast Du doch das Prinzip schon begriffen!
          Es gibt eine sogenannte "superglobale Variable", die im ganzen Script über die selbe Referenz (Namen) erreichbar ist. Da die Speicherallokation in PHP fast 100% durchgängig sauber funktioniert, kannst Du darauf vertrauen, dass bei Neuzuweisung (Neuallokation) einer Variablen diese

          • temporär angelegt wird
          • dieder der erforderliche Typ und Speicherplatz zugewiesen wird
          • dieser die Wete aus einer evtl schon vorher vorhandenen Variablen gleichen Namens zugeordnet werden ( Vname = Vname ) oder auch bei Teilbereichen ( Vname = Vname.Unterbereich)
          • der Speicher für die alte Variable danach freigegeben wird
          • in der Namensliste die Referenz auf den Speicherbereich der neuen Variable "umgebucht" wird.

          Du musst also, um $_SESSION zu initialisieren, nur

          $_SESSION = array();

          schreiben.

          Alles andere macht PHP automatisch für Dich. Theoretisch könntest Du auch
          $_SESSION="";

          schreiben, was aber bei der Zuweisung eines Subrecords für $_SESSION
          später Probleme bereiten könnte.

          Grüße

          Der blanke Hans

  2. Moin!

    ich würde gerne wissen, ob eine vorhandene sessionvariable überschrieben wird, wenn man sie neu setzt.

    Welcher Quellcode liegt dieser Annahme zugrunde? Wenn man weiß, was du versuchst, finden sich Fehler leichter.

    in meinem skripüt sieht es nämlich sehr danach aus, das dies nicht der fall ist, sondern das, wenn eine sessionvariable bereits besteht und man versuchst diese zu überschreiben mit session_register, dies ignoriert wird.

    Nein, das kann ich aus meiner Erfahrung nicht bestätigen.

    wenn ich vorher die variable 'unregister', dann kann ich die variable neu setzen.

    Im Übrigen ist die Verwendung von session_register() und session_unregister() seit langem nicht mehr empfohlen. Verwende die wunderbare Variable $_SESSION. Das ist ein Array, welchem du beliebige Werte in beliebiger Konstellation übergeben kannst, welches am Skriptende jeweils schön abgespeichert und beim nächsten Skript nach session_start() wiederhergestellt wird.

    - Sven Rautenberg

    --
    ss:) zu:) ls:[ fo:} de:] va:) ch:] sh:) n4:# rl:| br:< js:| ie:( fl:( mo:|