Ergebnis 1 bis 15 von 15

Thema: Problem mit PHPSESSID in Multidomain-Umgebung

  1. #1
    Contao-Nutzer
    Registriert seit
    03.12.2014.
    Beiträge
    77

    Standard Problem mit PHPSESSID in Multidomain-Umgebung

    Moin Forum,

    ich habe eine Contao 4.13.42/PHP 8.3.6 Installation, in der ich 2 Domains habe. Für eine der beiden Domains habe ich eine extra Tabelle in der DB, um dort verschiedene Produktanfragen von unterschiedlichen Unterseiten zu sammeln. Als Referenz benutze ich den Wert des PHPSESSID Cookies. Das hat (und tut) in einer Single Domain Umgebung wunderbar funktioniert.

    Nun ist in der Contao Installation eine weitere Domain hinzugekommen und die Konstruktion funktioniert nicht mehr. Das Problem ist, dass die Session-ID bei jedem Seitenaufruf neu erstellt wird . Ich habe leider überhaupt keine Idee, worauf das zurückzuführen sein könnte.

    Ich beobachte folgendes:
    Für die eine Domain werden 2 PHPSESSID angelegt... Siehe Anhang.

    2024-04-19 10_10_18-PHPSESSID-Problem.png

    Der Eintrag für stage.domain-a.de ist die korrekte URL mit der die Seite auch aufgerufen wird.
    Warum da noch ein Cookie für www.domain-a.de angelegt wird, kann ich nicht erklären. Es gibt da keine Umschreibungen oder Webserverkonfigurationen mit www.

    Ein
    PHP-Code:
    echo session_id(); 
    wirft auf dieser Seite den korrekten Wert des stage... Eintrages aus ... und tut das auch bei Seitenwechseln oder Refreshs. Das ist soweit wie erwartet.

    Auf der zweiten Domain, stage.domain-b.de, kann ich im Browser-Debugger aber keine PHPSESSID Cookies erkennen? Auf dieser URL wirft
    PHP-Code:
    echo session_id(); 
    , bei jedem Refresh oder Seitenwechsel eine neue ID aus ... und damit funktioniert dann natürlich die oben beschriebene Verwendung als Referenz nicht mehr ...

    Habt ihr irgendeine Idee wieso es zu so einem Verhalten kommt? "Normalerweise" sollte das in einer Multidomain-Umgebung doch funktionieren mit 2 unterschiedlichen PHPSESSID für jede Domain oder?
    Wieso kommt es zu dem Eintrag www.?

    Wo könnte ich ansetzen zur Problemlösung?
    DANKE schon mal für jede Hilfe.

  2. #2
    Contao-Nutzer
    Registriert seit
    03.12.2014.
    Beiträge
    77

    Standard

    Moin zusammen,

    ich habe jetzt versucht den allereinfachsten Aufbau zu erstellen, um das Verhalten zu reproduzieren. Ich habe eine ganz frische Version C4.13.43 mit PHP 8.3.6 per Manager installiert. example1.de. Minimaltheme/Seitenlayout und "Hallo Welt"-Text. Wird angezeigt.
    Ich richte in dieser Contao-Umgebung eine neue Root-Webseite für example2.de ein. Minimal Seitenlayout und "Hallo Welt"-Text. Wird angezeigt.

    Unter beide Texte lasse ich diesen Inhalt ausgeben:
    PHP-Code:
    <?php
        
    if (session_status() === PHP_SESSION_NONEsession_start();
        echo 
    session_id();
    Ergebnis:
    example1.de gibt eine Session-ID aus und erhält diese bei jedem Refresh.
    example2.de gibt eine (andere) Session-ID aus und erneuert diese bei jedem Refresh.

    PHPSESSID Cookie wird entsprechend angelegt und bleibt bei example1.de, bzw. ändert den Wert bei example2.de.

    Em? ICH erwarte eigentlich, dass sich example2.de genauso wie example1.de verhält. Ist das eine falsche Annahme? Ich meine, dass muss sich doch für jede Wurzelseite gleich verhalten oder? Muss ich noch etwas einstellen? Ist das evtl. gar kein Contao-Problem, sondern die Umschreibung beim Provider ist fehlerhaft? bei letzterem sieht es aber eigentlich für mich richtig aus.

    Fragezeichen über Fragezeichen ...

  3. #3
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    35.517
    Partner-ID
    10107

    Standard

    Poste mal die echten Domains.
    » sponsor me via GitHub or PayPal or Revolut

  4. #4
    Contao-Nutzer
    Registriert seit
    03.12.2014.
    Beiträge
    77

    Standard

    Gerne:

    https://example1.de/

    und

    https://example2.de/

    Vielen Dank, Spooky
    Geändert von Brubbel (22.04.2024 um 14:51 Uhr)

  5. #5
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    35.517
    Partner-ID
    10107

    Standard

    Dort kann ich keine Probleme feststellen. Oder wie genau lässt sich das Problem reproduzieren?
    » sponsor me via GitHub or PayPal or Revolut

  6. #6
    Contao-Nutzer
    Registriert seit
    03.12.2014.
    Beiträge
    77

    Standard

    ? Öm, auf der Stage.. Seite ... die id hinter dem Datum ... Wenn Du die Seite neu lädst ... ändern sich bei Dir die ID nicht??

  7. #7
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    35.517
    Partner-ID
    10107

    Standard

    Nein.

    Aber session_start() solltest du nie selbst ausführen. Session Access machst du immer mit $request->getSession(). Deine Test Seiten setzen nämlich auch gar keine Session Cookies - dein Test macht also eher was kaputt als dass er was testet
    » sponsor me via GitHub or PayPal or Revolut

  8. #8
    Contao-Nutzer
    Registriert seit
    03.12.2014.
    Beiträge
    77

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Nein.
    Öm, stammel ... stotter ... Dann muss es ja was innerhalb meiner Umgebung auslösen. Ich schaue noch mal und auf jeden Fall schon mal Danke fürs anschauen.

  9. #9
    Contao-Nutzer
    Registriert seit
    03.12.2014.
    Beiträge
    77

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Deine Test Seiten setzen nämlich auch gar keine Session Cookies - dein Test macht also eher was kaputt als dass er was testet
    Oh, ich dachte ich kann das damit "erzwingen". Von meiner Seite sah es so aus als könnte ich es damit "provozieren". Unmittelbar nach Aufruf erschien bei mir der Cookie und so dachte ich, dass ist der richtige Weg. Ich probiere auch mal Deinen Hinweis.
    Danke!

  10. #10
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    35.517
    Partner-ID
    10107

    Standard

    Eine Session provozieren kannst du mit
    PHP-Code:
    $request->getSession()->set('foo''foo'); 
    Und mit
    PHP-Code:
    $request->getSession()->getId() 
    kommst du danach an die ID.
    » sponsor me via GitHub or PayPal or Revolut

  11. #11
    Contao-Nutzer
    Registriert seit
    03.12.2014.
    Beiträge
    77

    Standard

    Danke Spooky, für die Aufklärung!

    Ich nutze jetzt diesen Code und alles funktioniert genau so wie es soll. 1000 Dank!

    PHP-Code:
    use Symfony\Component\HttpFoundation\Session\Session;

    $session = new Session();
    $session->set('attribute-name''attribute-value');

    $id $session->getId();

    echo 
    $id

  12. #12
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    35.517
    Partner-ID
    10107

    Standard

    Das solltest du so nicht machen. Du musst die Session aus dem Request holen.
    » sponsor me via GitHub or PayPal or Revolut

  13. #13
    Contao-Nutzer
    Registriert seit
    03.12.2014.
    Beiträge
    77

    Standard

    Oh, ich weiß nicht welcher Request das wäre, bzw. wie ich das genau angeben soll im (Frontend-)Template?

    Ich dachte ich erzeuge so eine (neue) Session und benutze dann diese ID? Für mich sieht es so aus als würde das auch funktionieren? Ich bekomme nun für jede Domain eindeutige IDs die auch bei Refresh und Seitenwechseln erhalten bleiben.

  14. #14
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    35.517
    Partner-ID
    10107

    Standard

    Zitat Zitat von Brubbel Beitrag anzeigen
    Oh, ich weiß nicht welcher Request das wäre, bzw. wie ich das genau angeben soll im (Frontend-)Template?
    In einem Contao PHP Template kommst du bspw. so an den Request:
    PHP-Code:
    \Contao\System::getContainer()->get('request_stack')->getCurrentRequest() 
    » sponsor me via GitHub or PayPal or Revolut

  15. #15
    Contao-Nutzer
    Registriert seit
    03.12.2014.
    Beiträge
    77

    Standard

    Das fehlte mir. Wunderbar! DANKE!!

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 2 (Registrierte Benutzer: 0, Gäste: 2)

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •