WernerK: Mehrere Sessions möglich?

Hi Forum,
ich habe verschiedene PHP Scripte die alle mit Sessions arbeiten.
Teilweise verwende ich gleiche Session Variablennamen, z.b.
$_SESSION['LogId']

Wenn jetzt beim gleichen PC bzw. USer / Browser einmal das PHP Script "admin.php" verwendet wird und zusätzlich "anwender.php" könnte es sein, dass beide in die Session schreiben mit gleichen Variablen Namen.

Meine Frage daher:
Kann man event. mehrere Sessions mit unterschiedlichen IDs starten, aber für den gleichen Browser / User?
Also das etwa "anwender.php" in die Session 2222277777 schreibt und "admin.php" in die Session 4444333 ?

Oder sollte man besser für jede Anwendung eigene Session Variablennamen nehmen?

Danke
Werner

  1. Hi,
    Session IDs kann man tatsächlich setzen.

    Lg
    Lukas

    1. Moin!

      Hi,
      Session IDs kann man tatsächlich setzen.

      Session-Names auch - und das ist in diesem Fall sogar deutlich sinnvoller. session_name("adminsession") vs. session_name("anwendersession") (jeweils vor session_start()) würde das Problem auf den ersten Blick lösen.

      Nichtsdestotrotz bleibt die Möglichkeit bestehen, dass aus irgendeinem Grund ein Browser für beide Session-Namen die identische Session-ID erhält - und die standardmäßige Sessiondaten-Speicherung lädt nur anhand der ID, es würde also grundsätzlich wieder durcheinandergehen können.

      Von daher ist der Vorschlag mit passenden Unterarrays deutlich schlauer, da er das Problem grundsätzlicher löst.

      Alternativ könnte man auch eine eigene Routine zum Session-Speichern schreiben, die auch den Sessionnamen mit einbezieht.

      - Sven Rautenberg

      --
      "Love your nation - respect the others."
      1. Hallo zusammen,
        vielen Dank für die Vorschläge.

        Von daher ist der Vorschlag mit passenden Unterarrays deutlich schlauer, da er das Problem grundsätzlicher löst.

        So etwas ähnliches hatte ich mir auch schon überlegt. Ich dachte mir event. die Session Variablennamen jeweils mit einem eindeutigen "Flag" zu versehen, wie etwa;
        $_SESSION['admin_JobID']
        und
        $_SESSION['user_JobID']

        Aber das mit dem Array ist auch gut.

        viele Grüße
        Werner

  2. Oder sollte man besser für jede Anwendung eigene Session Variablennamen nehmen?

    eine session kannst du nur einmal startet - aber was du mit dieser session machst, kannst du dir selbst aussuchen

    die session zb an einen datenbankeintrag koppeln und dort reinschreiben "ich bin über anwender.php gekommen = 1" und "ich bin über admin.php gekommen = 1" ist eine möglichkeit - so kann jemand eine session besitzen und beide "rechte" haben oder nur eins von beiden oder gar keins - die sessions solltest du prinzipiell global starteten und nicht nur bei zwei bestimmten scripten

  3. Lieber WernerK,

    ich empfehle Dir, jeweils ein eigenes Unter-Array innerhalb von $_SESSION anzulegen:

    $_SESSION['admin']['LogId']  
    $_SESSION['user']['LogId']
    

    Damit bist Du aus der Malaise wieder heraus und kannst in Deinem PHP-Quellcode per "suchen & ersetzen" ganz einfach Deinen Code anpassen.

    Liebe Grüße aus Ellwangen,

    Felix Riesterer.

    --
    ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)
  4. Hello,

    wenn Du ausschließlich mit transparenter SID arbeitest, ist das möglich, also NICHT mit Cookies.
    Anderenfalls würde der Browser selber entscheiden wollen, an welche URL er welchen Cookie wieder mit zurücksendet.

    Die Nachteile von Trans-SID sind aber hinlänglich bekannt.

    Liebe Grüße aus Syburg bei Dortmund

    Tom vom Berg

    --
    Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de
    1. Hallo Tom,

      Die Nachteile von Trans-SID sind aber hinlänglich bekannt.

      mir leider nicht. Was ist den eine Trans SID?
      Ich habe mich bisher nie um die Session ID gekümmert

      Gruss und danke
      Werner

      1. Hello,

        Die Nachteile von Trans-SID sind aber hinlänglich bekannt.

        mir leider nicht. Was ist den eine Trans SID?

        Eine Transparente ID.
        Gemeint ist hier, dass diese im für Normaluser sichtbaren Teil der Übertragung (im HTTP-Body) eingebaut wird, also in der URi, in allen Links und Hyperreferenzen und Formular-Action-Attributen des Dokumentes und nicht nur im HTTP-Head.

        Ich habe mich bisher nie um die Session ID gekümmert

        Dann wird es Zeit ;-)
        http://de3.php.net/manual/en/book.session.php

        Liebe Grüße aus Syburg bei Dortmund

        Tom vom Berg

        --
        Nur selber lernen macht schlau
        http://bergpost.annerschbarrich.de
        1. Moin!

          Die Nachteile von Trans-SID sind aber hinlänglich bekannt.

          mir leider nicht. Was ist den eine Trans SID?

          Eine Transparente ID.
          Gemeint ist hier, dass diese im für Normaluser sichtbaren Teil der Übertragung (im HTTP-Body) eingebaut wird, also in der URi, in allen Links und Hyperreferenzen und Formular-Action-Attributen des Dokumentes und nicht nur im HTTP-Head.

          Nö, sorry, aber deine Definition ist irreführend und falsch.

          Die PHP-Option heißt "session.use_trans_sid". Das ist die Anweisung an PHP, die Session-ID "transparent" herzustellen, d.h. der Programmierer muß sich nicht drum kümmern, ob und wie die Session-ID dem Browser übermittelt wird - irgendwie wird ein funktionierender Weg schon gefunden werden.

          Das ist der (dir hoffentlich) hinlänglich bekannte Automatismus, die Session-ID erstmal grundsätzlich an die URL dranzuhängen und parallel noch ein gleichlautendes Cookie mitzuschicken, um dann bei späteren Requests auf die URL-Variante zu verzichten, sollte ein Cookie mit der Session-ID festgestellt worden sein.

          Deine Argumentation ist also technisch vollkommen falsch: "wenn Du ausschließlich mit transparenter SID arbeitest, ist das möglich, also NICHT mit Cookies."

          Richtig ist: Die "transparente SID" muß DEAKTIVIERT und die Session-ID manuell an jede interne URL angehängt werden, damit deine Idee funktioniert.

          Abgesehen davon widerspricht es ziemlich der Intuition, wenn man eine den meisten Benutzern offensichtliche Session-ID als "transparent" bezeichnen würde.

          - Sven Rautenberg

          --
          "Love your nation - respect the others."
          1. Hello,

            Nö, sorry, aber deine Definition ist irreführend und falsch.

            Wie Du darauf kommst, kann ich nicht nachvollziehen.

            Wenn Du session.use_cookies und session.use_only_cookies ausschaltest und session.use_trans_sid einschaltest, sollten keine Cookies mehr verwendet werden und die ID automatisch "transparent" eingebaut werden.

            Es werden keine Cookies generiert und keine ausgewertet für die Session.

            Wo siehst Du Da einen Fehler?

            Was allerdings passiert, wenn man nun widersprüchlicherweise zusätzlich session.use_only_cookies _einschaltet_, habe ich aktuell nicht ausprobiert.

            Grüße aus Syburg bei Dortmund

            Tom vom Berg

            --
            Nur selber lernen macht schlau
            http://bergpost.annerschbarrich.de
            1. Moin!

              Nö, sorry, aber deine Definition ist irreführend und falsch.

              Wie Du darauf kommst, kann ich nicht nachvollziehen.

              Wenn Du session.use_cookies und session.use_only_cookies ausschaltest und session.use_trans_sid einschaltest, sollten keine Cookies mehr verwendet werden und die ID automatisch "transparent" eingebaut werden.

              Genau darum geht es: Die Definition von "transparent".

              Eine Session-ID in einer URL ist keine "transparente Session-ID", sondern "eine Session-ID in der URL".

              "Transparent" ist, dass PHP an alle relativen URLs einer auszuliefernden Seite (nach Maßgabe von url_rewriter.tags) die Sessioninformation anhängen kann, ohne dass der Programmierer sich explizit drum kümmern muß.

              Alternativbeispiel: Ein transparenter Proxy ist auch vollautomatisch mit im HTTP-Verkehr dabei, ohne dass der Browsernutzer ihn als Proxy eintragen muß.

              Man muß das aber nicht transparent machen lassen, man kann es genausogut auch manuell und explizit tun, ohne dass sich an der Funktionsweise der Session oder den Sicherheitsimplikationen irgendetwas ändern würde. "Transparent" ist der Mechanismus also NUR für den Programmierer. Insofern ist es unsinnig, eine Session-ID in der URL als "transparente SID" zu bezeichnen, wenn eine nicht transparente SID, die manuell dorthin gelangte, genauso aussieht und genauso funktioniert.

              Wenn du also die Anweisung gibts "benutze transparente Session-IDs", dann ist das Unsinn, weil es sowas nicht gibt. Es gibt den transparenten Mechanismus zur Übermittlung der Session-ID, den man nutzen könnte.

              Es werden keine Cookies generiert und keine ausgewertet für die Session.

              Wo siehst Du Da einen Fehler?

              Was im einzelnen ein- oder auszuschalten ist, ist bislang in deinem Posting nicht erwähnt worden. Du hast nur von "transparenter ID" gefaselt.

              Was allerdings passiert, wenn man nun widersprüchlicherweise zusätzlich session.use_only_cookies _einschaltet_, habe ich aktuell nicht ausprobiert.

              Was soll schon passieren?

              session.use_trans_sid regelt das Anhängen der Session-ID an URLs (1 = anhängen, 0 = nicht anhängen).

              session.use_cookies regelt das Versenden von Cookies (1 = cookie senden, 0 = nicht senden).

              session.use_only_cookies regelt das Ermitteln der Session-ID (1 = nur aus $_COOKIE nehmen, 0 = auch aus $_GET oder $_POST nehmen).

              In Summe liefert use_trans_sid = 1, use_cookies = 0, use_only_cookies = 1 ein ohne manuelle Intervention unbrauchbares Sessionsystem, da die Session-ID nie per Cookie ausgeliefert, aber nur per Cookie akzeptiert wird. Man muß zwingend manuell ein Session-Cookie generieren, damit es funktioniert.

              - Sven Rautenberg

              --
              "Love your nation - respect the others."
              1. Hello,

                Wenn Du session.use_cookies und session.use_only_cookies ausschaltest und session.use_trans_sid einschaltest, sollten keine Cookies mehr verwendet werden und die ID automatisch "transparent" eingebaut werden.

                Genau darum geht es: Die Definition von "transparent".

                Transparent hat zwei wesentliche Bedeutungen:

                • erkennbar         (gilt für Betrachtung des Objektes)
                • durchsichtig      (gilt für die Betrachtung des Objektflusses)

                im Sinne dieses Themas wiedersprechen die sich leider auf den ersten Blick.
                Auf den zweiten Blick ist leicht zu erkennen, dass hier nicht die Rede von Objektfluss sein kann, sondern nur von "Objekt des Interesses". Dann bedeutet transparent eindeutig "sichtbar".

                Darüber wurde aber an genügend Stellen schon ausführlich diskutiert, auch hier im Forum.
                Die PHPler haben vermutlich "erkennbar" gemeint, und nicht "durchsichtig/durchlässig", so wie das bei einem Internetzugang die Bedeutung wäre.

                Liebe Grüße aus Syburg bei Dortmund

                Tom vom Berg

                --
                Nur selber lernen macht schlau
                http://bergpost.annerschbarrich.de
                1. Moin!

                  Hello,

                  Wenn Du session.use_cookies und session.use_only_cookies ausschaltest und session.use_trans_sid einschaltest, sollten keine Cookies mehr verwendet werden und die ID automatisch "transparent" eingebaut werden.

                  Genau darum geht es: Die Definition von "transparent".

                  Transparent hat zwei wesentliche Bedeutungen:

                  • erkennbar         (gilt für Betrachtung des Objektes)
                  • durchsichtig      (gilt für die Betrachtung des Objektflusses)

                  http://de.wikipedia.org/wiki/Transparenz_(Computer):
                  "Unter Transparenz versteht man im Zusammenhang mit der Computer- und Netzwerktechnik, dass ein bestimmter Teil eines Systems zwar vorhanden und in Betrieb, aber ansonsten „unsichtbar“ ist und daher vom Benutzer nicht als vorhanden wahrgenommen wird."

                  "Benutzer" = der Programmierer.
                  "vorhanden und in Betrieb" = die Generierung der Session-ID an Links etc.
                  "vom Benutzer nicht als vorhanden wahrgenommen" = der Programmierer muß sich nicht drum kümmern, die Session-ID an die Links zu hängen.

                  im Sinne dieses Themas wiedersprechen die sich leider auf den ersten Blick.
                  Auf den zweiten Blick ist leicht zu erkennen, dass hier nicht die Rede von Objektfluss sein kann, sondern nur von "Objekt des Interesses". Dann bedeutet transparent eindeutig "sichtbar".

                  Nein. "use_trans_sid" heißt die Option, und sie schalte ein oder aus, dass an Links die Session-ID angehängt wird, kein Cookie empfangen wurde. Nicht die Session-ID am Link ist transparent, sondern das Anhängen an den Link ist es.

                  - Sven Rautenberg

                  --
                  "Love your nation - respect the others."
                  1. Hello,

                    Genau darum geht es: Die Definition von "transparent".

                    Transparent hat zwei wesentliche Bedeutungen:

                    • erkennbar         (gilt für Betrachtung des Objektes)
                    • durchsichtig      (gilt für die Betrachtung des Objektflusses)

                    http://de.wikipedia.org/wiki/Transparenz_(Computer):
                    "Unter Transparenz versteht man im Zusammenhang mit der Computer- und Netzwerktechnik, dass ein bestimmter Teil eines Systems zwar vorhanden und in Betrieb, aber ansonsten „unsichtbar“ ist und daher vom Benutzer nicht als vorhanden wahrgenommen wird."

                    Ja, ja, wiki ...

                    und außerdem steht dort ja "Transparenz" auf Deutsch und nicht "transparent" auf Amienglisch.

                    Hier ging es um "sichtbar".
                    Wenn die Session-ID sichtbar übertragen wird, bezeichnen das die PHPler mit "trans_sid".

                    Warum Du daraus eine Grundsatzdiskussion über die sonstige Bedeutung des Wortes anfängst, liegt für mich noch im Nebel, um nicht zu sagen, es ist für mich intransparent oder vielleicht sogar opak ;-)

                    Nun noch zum Abschluss nochmals _meine_ Fragen:

                    1.)
                    Muss der PHP-Anwendungsprogrammierer tatsächlich seine Sessions manuell aufbauen, wenn er nur die sichtbare SID wünscht und keinen Cookie, oder kann er sich mit den von mir beschriebenen  Einstellungen behelfen?

                    2.)
                    Wenn er ausschließlich die sichtbare SID erzeugt hat, kann er damit mehrere Sessions zu einer URL parallel auf einem Client führen?

                    Gespannte Grüße aus Syburg bei Dortmund

                    Tom vom Berg

                    --
                    Nur selber lernen macht schlau
                    http://bergpost.annerschbarrich.de
                    1. Moin!

                      Hier ging es um "sichtbar".

                      DIR ging es um "sichtbar".

                      Wenn die Session-ID sichtbar übertragen wird, bezeichnen das die PHPler mit "trans_sid".

                      Nein, das ist eben falsch.

                      Du übersetzt "use_trans_sid" mit "schreibe immer die SID in die URL". Das passiert aber nicht. Die SID wandert nur dann in die URL, wenn kein Cookie empfangen wurde. Was wiederum bedeutet, dass es für den Programmierer transparent ist, wie PHP die SID weiterreicht - unter dem Strich also egal, er muß sich nicht drum kümmern.

                      Dasselbe Spielchen gibts ja auch bei "session.gc_maxlifetime", was bekanntlich die "minlifetime" definiert.

                      Warum Du daraus eine Grundsatzdiskussion über die sonstige Bedeutung des Wortes anfängst, liegt für mich noch im Nebel, um nicht zu sagen, es ist für mich intransparent oder vielleicht sogar opak ;-)

                      Du behauptest, die SID in der URL wäre "eine transparente Session-ID". Das ist falsch, weshalb ich dich korrigiere.

                      - Sven Rautenberg

                      --
                      "Love your nation - respect the others."