Update auf 4.10 Session verlust nach redirect via header()
Update auf 4.10 Session verlust nach redirect via header()
Liebe Contenido Community,
Ich arbeite erst seit kurzem mit Contenido und habe ein Projekt übernommen, welches kürzlich von V.4.9 auf V.4.10 upgedated wurde. Gleichzeitig wurde die PHP-Version von 7.2.31 auf 7.4.7 gestellt.
Seit dem Update verliere ich den $sess Inhalt bei einem redirect via header().
Hat jemand eine Idee wie ich dieses Problem lösen kann?
Liebe Grüsse,
Marco
Ich arbeite erst seit kurzem mit Contenido und habe ein Projekt übernommen, welches kürzlich von V.4.9 auf V.4.10 upgedated wurde. Gleichzeitig wurde die PHP-Version von 7.2.31 auf 7.4.7 gestellt.
Seit dem Update verliere ich den $sess Inhalt bei einem redirect via header().
Hat jemand eine Idee wie ich dieses Problem lösen kann?
Liebe Grüsse,
Marco
-
- Beiträge: 4254
- Registriert: Do 30. Jun 2005, 22:56
- Wohnort: Eltmann, Unterfranken, Bayern
- Kontaktdaten:
Re: Update auf 4.10 Session verlust nach redirect via header()
Servus,
zuerst einmal willkommen im CONTENIDO-Forum.
Das könnte allein schon an der zu hohen PHP-Version liegen. Falls Du die umstellen kannst, solltest Du es mal mit max PHP 7.3 versuchen.
Gruß aus Franken
Ortwin
zuerst einmal willkommen im CONTENIDO-Forum.
Das könnte allein schon an der zu hohen PHP-Version liegen. Falls Du die umstellen kannst, solltest Du es mal mit max PHP 7.3 versuchen.
Gruß aus Franken
Ortwin
ConLite 2.1, alternatives und stabiles Update von Contenido 4.8.x unter PHP 7.x - Download und Repo auf Gitport.de
phpBO Search Advanced - das Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog
phpBO Search Advanced - das Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog
Re: Update auf 4.10 Session verlust nach redirect via header()
Hallo Marco,
normalerweise beendet man direkt nach einer Weiterleitung die Ausführung weiteren Codes durch das hinzufügen von exit() oder die(). Das führt aber dazu, dass Änderungen in der Session nicht gespeichert werden. Das Speichern der Session geschieht am Ende des Frontend-Scriptes (contenido/includes/frontend/include.front_content.php) mit folgender Zeile:
Eventuell löst es dein Problem, wenn du nach der Weiterleitung die Zeile einfügst, z. B.:
Bei einer Artikelweiterleitung, wird das schon so gehandhabt.
Falls du Probleme mit einem falsch gesetzten Cookie-Pfad haben solltest, hilft dir vielleicht folgender Beitrag dazu:
viewtopic.php?t=43499&p=179678#p179678
Grüße
xmurrix
normalerweise beendet man direkt nach einer Weiterleitung die Ausführung weiteren Codes durch das hinzufügen von exit() oder die(). Das führt aber dazu, dass Änderungen in der Session nicht gespeichert werden. Das Speichern der Session geschieht am Ende des Frontend-Scriptes (contenido/includes/frontend/include.front_content.php) mit folgender Zeile:
Code: Alles auswählen
cRegistry::shutdown();
Code: Alles auswählen
header('Location: /redirect/url', true);
cRegistry::shutdown();
exit();
Falls du Probleme mit einem falsch gesetzten Cookie-Pfad haben solltest, hilft dir vielleicht folgender Beitrag dazu:
viewtopic.php?t=43499&p=179678#p179678
Grüße
xmurrix
CONTENIDO Downloads: CONTENIDO 4.10.1
CONTENIDO Links: Dokumentationsportal, FAQ, API-Dokumentation
CONTENIDO @ Github: CONTENIDO 4.10 - Mit einem Entwicklungszweig (develop-branch), das viele Verbesserungen/Optimierungen erhalten hat und auf Stabilität und Kompatibilität mit PHP 8.0 bis 8.2 getrimmt wurde.
CONTENIDO Links: Dokumentationsportal, FAQ, API-Dokumentation
CONTENIDO @ Github: CONTENIDO 4.10 - Mit einem Entwicklungszweig (develop-branch), das viele Verbesserungen/Optimierungen erhalten hat und auf Stabilität und Kompatibilität mit PHP 8.0 bis 8.2 getrimmt wurde.
Re: Update auf 4.10 Session verlust nach redirect via header()
Vielen Dank für die schnellen Antworten , leider hat dies das Problem nicht gelöst.
Vielleicht stimmt etwas mit dem Code nicht, ich werde den mal teilen. Hoffentlich hilft das weiter.
Speichern des Wertes in Session und redirect:
Wert nach Redirect prüfen
Mir ist noch aufgefallen, dass die ID in der URL von der ID der Session auf der Zielseite abweicht, weiss nicht ob euch das weiterhilft
Vielleicht stimmt etwas mit dem Code nicht, ich werde den mal teilen. Hoffentlich hilft das weiter.
Speichern des Wertes in Session und redirect:
Code: Alles auswählen
<?php
// Location/Rederict String
$sSuccessPage = 'Location: ' . cUri::getInstance()->buildRedirect($aParams)."&".$sess->name."=".$sess->id;
// Wert in Session Speichern
$sess->register("sCartFields");
$sess->freeze();
// Redirect
header($sSuccessPage, true);
cRegistry::shutdown();
exit();
?>
Code: Alles auswählen
<?php
$sess->isRegistered("sCartFields"); // ergibt false
?>
Re: Update auf 4.10 Session verlust nach redirect via header()
Folgende Punkte könntest du noch prüfen/beachten:
Gruß
xmurrix
- Die Variable $sCartFields ist als global zu deklarieren
- cRegistry::shutdown(); ruft auch $sess->freeze() auf, eines von beiden reicht aus
- Session-Name und Session-ID muss man nicht in der URL mit übergeben
- Wird überhaupt ein Cookie gesetzt und ist der Cookie-Pfad korrekt? Wenn im Cookie-Pfad "/cms" steht, die Seite aber Clean-URLs ohne "/cms" am Anfang des URL-Pfades verwendet, wird das nicht funktionieren, siehe Anmerkung in vorheriger Antwort.
Code: Alles auswählen
<?php
global $sCartFields;
// Location/Rederict String
$sSuccessPage = 'Location: ' . cUri::getInstance()->buildRedirect($aParams);
// Wert setzen und in Session Speichern
$sCartFields = 'test';
$sess->register("sCartFields");
// Redirect
header($sSuccessPage, true);
cRegistry::shutdown();
exit();
?>
xmurrix
CONTENIDO Downloads: CONTENIDO 4.10.1
CONTENIDO Links: Dokumentationsportal, FAQ, API-Dokumentation
CONTENIDO @ Github: CONTENIDO 4.10 - Mit einem Entwicklungszweig (develop-branch), das viele Verbesserungen/Optimierungen erhalten hat und auf Stabilität und Kompatibilität mit PHP 8.0 bis 8.2 getrimmt wurde.
CONTENIDO Links: Dokumentationsportal, FAQ, API-Dokumentation
CONTENIDO @ Github: CONTENIDO 4.10 - Mit einem Entwicklungszweig (develop-branch), das viele Verbesserungen/Optimierungen erhalten hat und auf Stabilität und Kompatibilität mit PHP 8.0 bis 8.2 getrimmt wurde.
Re: Update auf 4.10 Session verlust nach redirect via header()
xmurrix vielen Dank für die ausführliche Antwort.
Ich glaube wir kommen der Sache näher. Im Cookie steht wie du vermutet hast "/cms" und die Seite verwendet Clean-URLs. Auf dem Test-System (alte Version), welche auch noch funktioniert ist der Cookie-Pfad ohne "/cms".
Leider habe ich keine Berechtigung für den Link in deiner vorherigen Antwort bezüglich dem Cookie Pfad. Könntest du mir dazu noch Infos schicken?
Vielen Dank, ich hoffe das Thema hat sich bald erledigt
Liebe Grüsse,
Marco
Ich glaube wir kommen der Sache näher. Im Cookie steht wie du vermutet hast "/cms" und die Seite verwendet Clean-URLs. Auf dem Test-System (alte Version), welche auch noch funktioniert ist der Cookie-Pfad ohne "/cms".
Leider habe ich keine Berechtigung für den Link in deiner vorherigen Antwort bezüglich dem Cookie Pfad. Könntest du mir dazu noch Infos schicken?
Vielen Dank, ich hoffe das Thema hat sich bald erledigt
Liebe Grüsse,
Marco
Re: Update auf 4.10 Session verlust nach redirect via header()
Ok, du kannst im Mandantenverzeichnis unter "cms/data/config/{environment}/", sofern "cms" das Mandantenverzeichnis ist, eine Datei "config.local.php" anlegen, das folgenden Inhalt hat:
Das geht auch Systemweit, also für das Frontend aller Mandanten, unter "data/config/{environment}/", mit einer Datei "config.local.php", die den gleichen Inhalt hat.
Gruß
xmurrix
Code: Alles auswählen
<?php
global $cfg;
if (empty($cfg)) {
$cfg = [];
}
if (empty($cfg['cookie'])) {
$cfg['cookie'] = [];
}
$cfg['cookie']['path']= '/';
Gruß
xmurrix
CONTENIDO Downloads: CONTENIDO 4.10.1
CONTENIDO Links: Dokumentationsportal, FAQ, API-Dokumentation
CONTENIDO @ Github: CONTENIDO 4.10 - Mit einem Entwicklungszweig (develop-branch), das viele Verbesserungen/Optimierungen erhalten hat und auf Stabilität und Kompatibilität mit PHP 8.0 bis 8.2 getrimmt wurde.
CONTENIDO Links: Dokumentationsportal, FAQ, API-Dokumentation
CONTENIDO @ Github: CONTENIDO 4.10 - Mit einem Entwicklungszweig (develop-branch), das viele Verbesserungen/Optimierungen erhalten hat und auf Stabilität und Kompatibilität mit PHP 8.0 bis 8.2 getrimmt wurde.
Re: Update auf 4.10 Session verlust nach redirect via header()
Jetzt läufts wieder! Vielen Dank xmurrix.
Weisst du vielleicht auch wieso der Fehler seit dem Update aufgetaucht ist?
Soweit ich weiss haben wir den Cookie-Pfad in der alten Version nie so definiert.
Liebe Grüsse,
Marco
Weisst du vielleicht auch wieso der Fehler seit dem Update aufgetaucht ist?
Soweit ich weiss haben wir den Cookie-Pfad in der alten Version nie so definiert.
Liebe Grüsse,
Marco
Re: Update auf 4.10 Session verlust nach redirect via header()
Keine Ursache.
Zwischen CONTENIDO 4.9 und 4.10 wurde irgendwann das Setzen des Cookie-Pfades überarbeitet. Früher wurde versucht, den Cookie-Pfad zum Frontend automatisch zu ermitteln und zu setzen. Aber das geht nicht einfach, da es je nach Anforderung anders sein kann. Daher gibt es die Möglichkeit, dies per Konfiguration zu setzen.
Per default wird dafür der Pfad der Frontend-URL, z. B. das "/cms" aus "https://domain.com/cms", verwendet. Das ist bei einem Mehrmandantensystem, das unter der gleichen Domain läuft aber unterschiedliche Mandantenordner hat, sehr wichtig. Falls man aber mit Clean-URLs arbeitet, und diese nicht mit dem Mandantenordner (z. B. "/cms") im Pfad der URL beginnen, so kann man das nun konfigurieren.
Gruß
xmurrix
CONTENIDO Downloads: CONTENIDO 4.10.1
CONTENIDO Links: Dokumentationsportal, FAQ, API-Dokumentation
CONTENIDO @ Github: CONTENIDO 4.10 - Mit einem Entwicklungszweig (develop-branch), das viele Verbesserungen/Optimierungen erhalten hat und auf Stabilität und Kompatibilität mit PHP 8.0 bis 8.2 getrimmt wurde.
CONTENIDO Links: Dokumentationsportal, FAQ, API-Dokumentation
CONTENIDO @ Github: CONTENIDO 4.10 - Mit einem Entwicklungszweig (develop-branch), das viele Verbesserungen/Optimierungen erhalten hat und auf Stabilität und Kompatibilität mit PHP 8.0 bis 8.2 getrimmt wurde.
-
- Beiträge: 84
- Registriert: Di 10. Jan 2006, 19:28
- Kontaktdaten:
Re: Update auf 4.10 Session verlust nach redirect via header()
Hallo Gemeinde,
ich habe ein ähnliches Problem, nach Update von 4.9.12 auf 4.10.0 werden angemeldete Frontenduser nach Klick auf einen Menüpunkt im passwortgeschützten Frontendbereich aus diesem herausgeworfen. Das liegt definitiv am Cookie-Pfad, denn ohne AMR passiert das nicht. Ich habe die Lösung von xmurrix eingebaut (config.local.php), aber das System weigert sich stoisch den Cookie-Pfad von "/cms" auf "/" zu setzen. Eine Ausgabe von "$cfg['cookie']['path']" in meinem Modul ergibt aber "/". Weiß jemand Rat?
Grüße
mikedreissig
ich habe ein ähnliches Problem, nach Update von 4.9.12 auf 4.10.0 werden angemeldete Frontenduser nach Klick auf einen Menüpunkt im passwortgeschützten Frontendbereich aus diesem herausgeworfen. Das liegt definitiv am Cookie-Pfad, denn ohne AMR passiert das nicht. Ich habe die Lösung von xmurrix eingebaut (config.local.php), aber das System weigert sich stoisch den Cookie-Pfad von "/cms" auf "/" zu setzen. Eine Ausgabe von "$cfg['cookie']['path']" in meinem Modul ergibt aber "/". Weiß jemand Rat?
Grüße
mikedreissig
Re: Update auf 4.10 Session verlust nach redirect via header()
Hallo mikedreissig,
Du müsstest also herausfinden, warum die Zeile
bei dir nicht den Wert aus deiner "$cfg['cookie']['path']" liefert.
Gruß
xmurrix
Der Pfad zum Cookie wird in der Datei contenido/classes/class.session.php (Zeile 90 ff) ermittelt, der Code dafür sieht so aus:...aber das System weigert sich stoisch den Cookie-Pfad von "/cms" auf "/" zu setzen. Eine Ausgabe von "$cfg['cookie']['path']" in meinem Modul ergibt aber "/". Weiß jemand Rat?...
Code: Alles auswählen
$path = parse_url($url, PHP_URL_PATH);
$path = cRegistry::getConfigValue('cookie', 'path', $path);
if (empty($path)) {
$path = '/';
}
Code: Alles auswählen
$path = cRegistry::getConfigValue('cookie', 'path', $path);
Gruß
xmurrix
CONTENIDO Downloads: CONTENIDO 4.10.1
CONTENIDO Links: Dokumentationsportal, FAQ, API-Dokumentation
CONTENIDO @ Github: CONTENIDO 4.10 - Mit einem Entwicklungszweig (develop-branch), das viele Verbesserungen/Optimierungen erhalten hat und auf Stabilität und Kompatibilität mit PHP 8.0 bis 8.2 getrimmt wurde.
CONTENIDO Links: Dokumentationsportal, FAQ, API-Dokumentation
CONTENIDO @ Github: CONTENIDO 4.10 - Mit einem Entwicklungszweig (develop-branch), das viele Verbesserungen/Optimierungen erhalten hat und auf Stabilität und Kompatibilität mit PHP 8.0 bis 8.2 getrimmt wurde.
-
- Beiträge: 84
- Registriert: Di 10. Jan 2006, 19:28
- Kontaktdaten:
Re: Update auf 4.10 Session verlust nach redirect via header()
Hallo xmurrix,
erstmal danke für Deine schnelle Antwort!
Dies hier war der entscheidende Hinweis:
Habe ein Update durchgeführt und nun läuft es rund.
Ich liebe dieses Forum!
mikedreissig
erstmal danke für Deine schnelle Antwort!
Dies hier war der entscheidende Hinweis:
Das existiert in contenido/classes/class.session.php in der Version 4.10.0 noch gar nicht, sondern erst ab 4.10.1$path = cRegistry::getConfigValue('cookie', 'path', $path);
Habe ein Update durchgeführt und nun läuft es rund.
Ich liebe dieses Forum!
mikedreissig