Werner: Session über 2 Webseiten.

Hallo zusammen,

ich baue im Moment 2 Webseiten auf und auf Beide soll ein Bestellvorgang funktionieren. Die 1. Webseite liegt im root-Verzeichnis und die 2. auf dem selben Server in einem Unterordner z.B. /test/

Auf beide Seiten soll die selbe Session verwendet werden, damit man egal ob man auf der Seite 1 bestellt oder auch auf der Seite 2 die Daten in der Session zur Verfügung hat.

Außerdem weiß man nicht welche Seite zu erst aufgerufen wird und der Wechsel zur jeweiligen anderen Webseite kann über einen Link erfolgen oder auch durch direktes eintippen in der Adresszeile im Browser.

Gibt es dafür eine Lösung? Funktioniert es nur mit Übergabe der Session-ID über einen Link?

Vielen Dank für die Antworten.

Grüße

Werner

  1. Gibt es dafür eine Lösung? Funktioniert es nur mit Übergabe der Session-ID über einen Link?

    Die Session bleibt solange am "leben" bis sie "destroyed" wird, oder bis das Fenster zu ist.

    Die Session-ID kansnt du über "session_id" auslesen.
    Sie ist Seitenübergreifend, auch ohne Links.

    Voraussetztung:
    Auf jeder Seite steht "session_start()".

    Gruss

    1. Hallo,

      danke für die Antwort. Problem ist aber wenn ich Daten in die Session auf Seite 1 schreibe und dann zur Seite 2 wechsel, dass die Daten nicht aus der selben Session verwendet werden, sondern eben eine neue Session verwendet wird.

      Gibt es dafür eine Lösung? Funktioniert es nur mit Übergabe der Session-ID über einen Link?

      Die Session bleibt solange am "leben" bis sie "destroyed" wird, oder bis das Fenster zu ist.

      Die Session-ID kansnt du über "session_id" auslesen.
      Sie ist Seitenübergreifend, auch ohne Links.

      Voraussetztung:
      Auf jeder Seite steht "session_start()".

      Gruss

      1. Bei 2 Seiten meine ich 2 ganz verschiedene Webseiten mit unterschiedlichen Domains.

        Hallo,

        danke für die Antwort. Problem ist aber wenn ich Daten in die Session auf Seite 1 schreibe und dann zur Seite 2 wechsel, dass die Daten nicht aus der selben Session verwendet werden, sondern eben eine neue Session verwendet wird.

        Gibt es dafür eine Lösung? Funktioniert es nur mit Übergabe der Session-ID über einen Link?

        Die Session bleibt solange am "leben" bis sie "destroyed" wird, oder bis das Fenster zu ist.

        Die Session-ID kansnt du über "session_id" auslesen.
        Sie ist Seitenübergreifend, auch ohne Links.

        Voraussetztung:
        Auf jeder Seite steht "session_start()".

        Gruss

        1. Hello,

          Bei 2 Seiten meine ich 2 ganz verschiedene Webseiten mit unterschiedlichen Domains.

          Gibt es dafür eine Lösung? Funktioniert es nur mit Übergabe der Session-ID über einen Link?

          Nein, es geht auch mit einer Übermittlung eines eineindeutigen Schlüssels über Post, entweder als hidden-field oder als Elementbezeichner für den Submit-Button.

          Wie wird denn zwischen den unterschiedlichen Domains umgeschaltet? Durch Link = GET-Methode? Dann geht es beim ersten Request nur als Information in der URi, wentweder als Pathinfo, oder eben als Parameter.

          Liebe Grüße aus Syburg bei Dortmund

          Tom vom Berg

          --
          Nur selber lernen macht schlau
          http://bergpost.annerschbarrich.de
    2. Gibt es dafür eine Lösung? Funktioniert es nur mit Übergabe der Session-ID über einen Link?

      Die Session bleibt solange am "leben" bis sie "destroyed" wird, oder bis das Fenster zu ist.

      Vom Fenster schliessen erfährt aber der ferne Server nichts.
      Auf dem Server existiert, solange kein aktives Logout geschieht, eine sehr empfängliche offene Session, solange sie nicht durch Überschreitung ihrer Gültigkeit als verbraucht gekennzeichnet werden kann.

      mfg Beat

      --
      Woran ich arbeite:
      X-Torah
      ><o(((°>       ><o(((°>
         <°)))o><                      ><o(((°>o
  2. Gibt es dafür eine Lösung?

    Die Lösung ist, immer das gleiche Script aufzurifen, dass die Sessionsd verwaltet.
    Alternativ programmierst du dir Sessionhandler, die mit einer Datenbank arbeiten.

    Die Session per URL übergeben geht auch, birgt aber einige Unsicherheiten. Sessionklau ist da nur eine.
    Allerdings bin ich mir nicht sicher, ob zwei Scripte auf die gleiche Session-Datei zugreifen können. Würde ja Probleme geben, wenn beide versuchen zu schreiben.
    Du brauchst also in jedem Fall zwei Sessions deren Daten ständig synchronisiert werden. Da würde ich, wie gesagt, eigene Sessionhandler schreiben, die auf ner Datenbank basieren, dann ist eine unerwünschte Redundanz kein Problem mehr.

    1. Die Lösung ist, immer das gleiche Script aufzurifen, dass die Sessionsd verwaltet.
      Alternativ programmierst du dir Sessionhandler, die mit einer Datenbank arbeiten.

      Die Session per URL übergeben geht auch, birgt aber einige Unsicherheiten. Sessionklau ist da nur eine.

      Genauer nicht Sessionklau (das ist auch bei Cookies möglich), sondern das Posten einer URL in einem Forum, das anderen Request die Möglichkeit gibt, diese eventuell noch offene Session zu erwerben

      Allerdings bin ich mir nicht sicher, ob zwei Scripte auf die gleiche Session-Datei zugreifen können. Würde ja Probleme geben, wenn beide versuchen zu schreiben.

      Da hast du schon mit einem einzigen Script Probleme, weil ja beliebig viele Instanzen des gleichen Scripts aufgerufen werden können.
      Natürlich geht das.

      Ich kenne mich mit PHP zwar nicht aus, aber ich denke kaum, dass Sessions nur von einem Scripts aus verwaltet werden können.

      mfg Beat

      --
      Woran ich arbeite:
      X-Torah
      ><o(((°>      ><o(((°>
         <°)))o><                      ><o(((°>o
      1. Da hast du schon mit einem einzigen Script Probleme, weil ja beliebig viele Instanzen des gleichen Scripts aufgerufen werden können.
        Natürlich geht das.

        Von zwei unterschiedlichen Webseiten? (Wobei ich bei zwei Webseiten von zwei Domains ausgehe)

        1. Da hast du schon mit einem einzigen Script Probleme, weil ja beliebig viele Instanzen des gleichen Scripts aufgerufen werden können.
          Natürlich geht das.

          Von zwei unterschiedlichen Webseiten? (Wobei ich bei zwei Webseiten von zwei Domains ausgehe)

          Nachdem um 15:58 hier klar wurde, dass verschiedene Domains im Spiel sind:
          Natürlich können mehrere Scripte auf den Cookie Manager zugreifen. Nur werden Cookies abhängig von der Domain mit dem Request gesendet, weshalb halt bei einem Link auf die parallele Domainveranstaltung die Cookies nicht mitgesendet werden und nicht zur Verfügung stehen.

          Eine Webseite ist für mich nicht mit einer Domain assoziiert, sondern mit dem Ort, wo die Daten liegen. Viele Wege führen nach Rom. Aber wenn mich der Papst nervt, hilft es nichts, die Wege zu belagern.

          mfg Beat

          --
          Woran ich arbeite:
          X-Torah
             <°)))o><                      ><o(((°>o
    2. Hello,

      Allerdings bin ich mir nicht sicher, ob zwei Scripte auf die gleiche Session-Datei zugreifen können. Würde ja Probleme geben, wenn beide versuchen zu schreiben.

      Zwei Scripte schon. Da können sogar noch viel mehr zugreifen, sofern sie zur selben Domain gehören!
      Dass die Zugriffe durch ein serialisiert werden, steht im Handbuch. Die Sessiondatei belibt solange exclusiv beim Script, bis dieses die Verbindung zu ihr löst, indem es den Stream schließt, ein Session_write_close() ausführen lässt, selber endet, oder oder...

      Liebe Grüße aus Syburg bei Dortmund

      Tom vom Berg

      --
      Nur selber lernen macht schlau
      http://bergpost.annerschbarrich.de
      1. Zwei Scripte schon. Da können sogar noch viel mehr zugreifen, sofern sie zur selben Domain gehören!

        Da der OP von "zwei Webseiten" spricht, gehe ich auch von zwei Domains aus. Sonst wären es in diesem Fall keine zwei Webseiten sondern eine Webseite mit einem Unterordner mit anderem Inhalt ;)

        1. Hello,

          Zwei Scripte schon. Da können sogar noch viel mehr zugreifen, sofern sie zur selben Domain gehören!

          Da der OP von "zwei Webseiten" spricht, gehe ich auch von zwei Domains aus. Sonst wären es in diesem Fall keine zwei Webseiten sondern eine Webseite mit einem Unterordner mit anderem Inhalt ;)

          Das ist nun eine interessante Frage. Was versteht man unter einer "Webseite" und was unter einer "Website"? Ist das dasselbe?

          Nach meinem Dafürhalten ist eine Webseite auf Neudeutsch als "webpage" zu übersetzen, während das Wort "website" als "Webangebot" übersetzt wird.

          Domainübergreifende Cookieverwaltung ist jedenfalls nicht so leicht zu realisieren.

          Liebe Grüße aus Syburg bei Dortmund

          Tom vom Berg

          --
          Nur selber lernen macht schlau
          http://bergpost.annerschbarrich.de
          1. Das ist nun eine interessante Frage. Was versteht man unter einer "Webseite" und was unter einer "Website"? Ist das dasselbe?

            Und somit hast du mich voll erwischt, weil ich von Web_sites_ ausgegangen bin und nicht von Web_seiten_.

            Allerdings wissen wir mittlerweile, dass es sich um Websites handelt mit verschiedenen Domains.

            1. Hello,

              Das ist nun eine interessante Frage. Was versteht man unter einer "Webseite" und was unter einer "Website"? Ist das dasselbe?

              Und somit hast du mich voll erwischt, weil ich von Web_sites_ ausgegangen bin und nicht von Web_seiten_.

              Allerdings wissen wir mittlerweile, dass es sich um Websites handelt mit verschiedenen Domains.

              Und wir wissen jetzt auch, was diese unbedachte Übernahme von amerikanischem Gedöns in unsere Sprache für Verwirrung anrichten kann. ;-))

              Liebe Grüße aus Syburg bei Dortmund

              Tom vom Berg

              --
              Nur selber lernen macht schlau
              http://bergpost.annerschbarrich.de
              1. Und wir wissen jetzt auch, was diese unbedachte Übernahme von amerikanischem Gedöns in unsere Sprache für Verwirrung anrichten kann. ;-))

                Vielleicht sollte man unterscheiden zwischen "Webauftritt" und "Webseite" als ein Teil davon.
                Wobei "Web" immer noch ein eingedeutschter Begriff ist ;)

                Wobei die einzige Rettung wohl nur das hier sein dürfte.

  3. n'abend,

    Auf beide Seiten soll die selbe Session verwendet werden, damit man egal ob man auf der Seite 1 bestellt oder auch auf der Seite 2 die Daten in der Session zur Verfügung hat.

    Dazu brauchst du erstmal ein eigenes Session-Handling, wie dir in anderen Postings bereits dargelegt wurde. Damit kannst du PHP bewegen von dir geschriebene Funktionen zu benutzen, um die Session-Daten zu lesen und speichern. Das kannst du an einem Zentralen Ort machen - z.b. in einer Datenbank, oder einem anderen zentral verfügbaren Speichermedium (memcached, APC?, Aber auch mit normalen Dateien sollte das Spielchen funktionieren). Beispiele und fertige Scripts findest du im Netz haufenweise.

    Da du nun eine zentrale Speicherstelle geschaffen hast, musst du nur noch dafür sorgen, dass unter beiden Domains die gleiche SessionID verfügbar gemacht wird. Wenn du das ganze automatisieren willst ist es wohl am einfachsten ein Script der jeweils anderen Domain in einem <iframe> oder <script> oder <img>  aufzurufen, und dem Script die aktuelle SessionID im QueryString mitzugeben. In diesem Script solltest du dann sicherstellen, dass die SessionID Im SessionCookie gespeichert wird, damit die beiden Domains die selbe SessionID kennen, um auf dieselben Daten zuzugreifen.

    Natürlich kannst du das ganze Sicherheitstechnisch (Session-Hijacking und co) noch ordentlich auf Vordermann bringen... Aber bezwinge erstmal die "kleinen" Hürden, bevor du dich um das Konfuse Zeug kümmerst...

    weiterhin schönen abend...

    --
    #selfhtml hat ein Forum?
    sh:( fo:# ch:# rl:| br:> n4:& ie:{ mo:} va:) de:] zu:} fl:( ss:? ls:[ js:|
    1. echo $begrüßung;

      Auf beide Seiten soll die selbe Session verwendet werden, damit man egal ob man auf der Seite 1 bestellt oder auch auf der Seite 2 die Daten in der Session zur Verfügung hat.

      Dazu brauchst du erstmal ein eigenes Session-Handling,

      Achwas. Beide Projekte liegen doch nur ein Unterverzeichnis entfernt auf dem selben Server. PHPs Default-Session-Verwaltung ist für das Problem ausreichend. Beide Projekte müssen nur den gleichen session.save_path verwenden.

      [...] musst du nur noch dafür sorgen, dass unter beiden Domains die gleiche SessionID verfügbar gemacht wird.

      Das ist das einzige Problem daran. Cookies lassen sich dafür nur dann verwenden, wenn beide Sites mindestens eine gemeinsame Second-Level-Domain haben, ansonsten mögen die Browser die nicht weitergeben. session_set_cookie_params() hilft, den Keks zu konfigurieren.

      Ansonsten muss anderweitig für eine Übertragung der Session-ID gesorgt werden und diese vor dem üblichen session_start() mit session_id() gesetzt werden.

      echo "$verabschiedung $name";

      1. Achwas. Beide Projekte liegen doch nur ein Unterverzeichnis entfernt auf dem selben Server. PHPs Default-Session-Verwaltung ist für das Problem ausreichend. Beide Projekte müssen nur den gleichen session.save_path verwenden.

        Damit beschränkt er sich aber für die Zukunft darauf, dass beide Domains immer auf dem gleichen Server liegen. Wenn das Script aber später mal auf zwei Server verteilt wird, wobei jede DOmain eine eigene Hardware hat, fängt die Arbeit von neuem an.

        Du hast natürlich Recht, dass es so funktioniert, aber eben nur in dieser Konstelation und nicht z.B. bei einer Erweiterung der Hardware oder dem Umzug von einer einzelnen Domain.

        Beim Sessionhandling per Datenbank z.B. muss nur gewährleistet sein, dass die Datenbank von beiden Servern erreichbar ist.

      2. n'abend,

        echo $begrüßung;

        echo 'tachfix';

        Dazu brauchst du erstmal ein eigenes Session-Handling,

        Achwas. Beide Projekte liegen doch nur ein Unterverzeichnis entfernt auf dem selben Server. PHPs Default-Session-Verwaltung ist für das Problem ausreichend. Beide Projekte müssen nur den gleichen session.save_path verwenden.

        Ich habe in den letzten 4 Jahren nichts mehr mit dem Default-SessionHandler gemacht. Soweit ich mich erinnere, hatte ich jedoch nur Probleme damit. Wenn der OP das ganze später mal richtig machen will, wird ihm die eigene Session-Verwaltung sicher zu Gute kommen...

        Das ist das einzige Problem daran. Cookies lassen sich dafür nur dann verwenden, wenn beide Sites mindestens eine gemeinsame Second-Level-Domain haben, ansonsten mögen die Browser die nicht weitergeben. session_set_cookie_params() hilft, den Keks zu konfigurieren.

        Wie ich (vielleicht nicht ganz so transparent) beschrieben habe, kann ich auf Webseite A eine bestimmte URI von Webseite B in (beispielsweise) einem iFrame laden, welcher ich im QueryString die SessionID übergebe. Das Script hinter der URI auf Webseite B macht hier nichts weiter als die mittels QueryString übergebene SessionID im SessionCookie zu speichern. Prächtig, und schon ist die selbe SessionID über 2 völlig verschiedene Domains hinweg bekannt. Natürlich will man das irgendwann richtig™ machen - aber das ist der erste Schritt, der zum Ziel führt.

        weiterhin schönen abend...

        --
        #selfhtml hat ein Forum?
        sh:( fo:# ch:# rl:| br:> n4:& ie:{ mo:} va:) de:] zu:} fl:( ss:? ls:[ js:|
        1. echo $begrüßung;

          Wenn der OP das ganze später mal richtig machen will, wird ihm die eigene Session-Verwaltung sicher zu Gute kommen...

          Wenn das Wörtchen wenn nicht wär ... Was später notwendig ist, kann man auch später noch implementieren, solange man sich nicht was Grundlegendes verbaut. Und das tut er mit dem Default-Session-Handler im Hinblick auf einen selbst zu schreibenden jedenfalls nicht. Es ist so schon komplex genug, die Session-ID zu transportieren, da muss man die Komplexität nicht auch noch einen eigenen Session-Handler erhöhen.

          echo "$verabschiedung $name";