#528 - Überarbeitete Cookie-Konfiguration & Session-Logik

Alle bestätigten Fehler in CONTENIDO 4.10 (erledigte Fehler werden durch geschlossene Beiträge gekennzeichnet).
Antworten
xmurrix
Beiträge: 3254
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Hat sich bedankt: 14 Mal
Danksagung erhalten: 49 Mal
Kontaktdaten:

#528 - Überarbeitete Cookie-Konfiguration & Session-Logik

Beitrag von xmurrix »

Hallo zusammen,

im GitHub-Ticket #528 wurde das Problem mit dem Cookie-Parameter "samesite" behoben. Vor PHP 7.3 konnte man das einfach an den Pfad anhängen, z. B. "/; sameSite=lax", seit PHP 7.3 wird das nicht akzeptiert.

Während der Arbeiten am Ticket gab es folgende Änderungen, die ich hier auflisten möchte.
  • Neue Konfiguration für Backend-/Frontend-Session-Cookies $cfg['backend']['session'] und $cfg['frontend']['session'] in data/config/production/config.misc.php und data/config/test/config.misc.php. Damit kann man nun detaillierter die Session für Backend/Frontend konfigurieren.
  • Die Klasse cSession (contenido/classes/class.session.php) wurde überarbeitet. Es Arbeitet mit der neuen Konfiguration und die Funktionen zum Serialisieren der Session-Variablen nutzen nun keine eval()-Funktion mehr.
  • Die Sichbarkeit der Funktion cSession->serialize() ist von `public` auf `protected` geändert worden. Im CONTENIDO Core wird es nur in cSession genutzt, die Gefahr, dass andere Module/Plugins das außerhalb von cSession ist, sehr gering, auch wenn es früher öffentlich war. Zusätzlich hat die cSession->serialize() einen neuen Parameter bekommen. Das war nötig, um von der Nutzung der eval() wegzukommen.
Die Änderungen sollten weitestgehend abwärtskompatibel sein und in den unterstützten PHP-Versionen keine Probleme bereiten. Prüft das bitte dennoch vorher bei euch, bevor ihr den aktuellen Entwicklungsstand von CONTENIDO bei euch nutzen wollt.

Cookie-Konfigurationen, die in der Konfig-Datei des Frontends gesetzt sind, werden auch übernommen, Beispiel:

Code: Alles auswählen

// Im Frontend in der Datei "cms/data/config/{environment}}/config.local.php"

global $cfg;

if (empty($cfg)) {
    $cfg = [];
}
if (empty($cfg['cookie'])) {
    $cfg['cookie'] = [];
}
$cfg['cookie']['path'] = '/';

Code: Alles auswählen

// In CONTENIDO in der Datei "data/config/{environment}/config.misc.php"

$cfg['frontend']['session'] = [
    'cookie_expires' => $cfg['cookie']['expires'] ?? null,
    'cookie_path' => $cfg['cookie']['path'] ?? null,
    'cookie_domain' => $cfg['cookie']['domain'] ?? null,
    'cookie_secure' => $cfg['cookie']['secure'] ?? false,
    'cookie_httponly' => $cfg['cookie']['httponly'] ?? false,
    'cookie_samesite' =>  $cfg['cookie']['samesite'] ?? null,
];
Viele Grüße und eine schöne Weihnachtszeit
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.
bodil
Beiträge: 394
Registriert: Fr 7. Okt 2011, 04:10
Hat sich bedankt: 10 Mal
Danksagung erhalten: 11 Mal
Kontaktdaten:

Re: #528 - Überarbeitete Cookie-Konfiguration & Session-Logik

Beitrag von bodil »

Ich habe ein weiteres cooles Feature entdeckt:
Wenn man beim Update vergisst, Plugins vom Orginalsystem ins neue System zu kopieren, hat das bisher immer zur kompletten Unbenutzbarkeit des Backends geführt. Und jetzt gibt es dazu einfach eine konstruktive Fehlermeldung. Fantastisch! Vielen Dank dafür!

Ich habe die neuste Version in PHP 8.5.0 getestet. Es gab ein paar (8) Deprecated-Meldungen, die aber größtenteils auf eine Änderung in der neuen PHP-Version zurückgehen und sich leicht beseitigen lassen.
Die sehen dann so aus:

Code: Alles auswählen

cCreateOrUpdateArtSpec(): Implicitly marking parameter $idArtSpec as nullable is deprecated, the explicit nullable type must be used instead in contenido\includes\functions.general.php on line 974
Hier reicht es, den Funktions-Kopf (?) anzupassen:

Code: Alles auswählen

function cCreateOrUpdateArtSpec(string $artsSecText, int $online, int $idArtSpec = null): bool
Hier stört sich PHP daran, dass für die letzte Variable ein Defaultwert festgelegt wird, der laut Definition gar nicht zugelassen ist. Ich habe das so korrigiert, in dem ich aus dem letzten int ein int|null gemacht habe:

Code: Alles auswählen

function cCreateOrUpdateArtSpec(string $artsSecText, int $online, int|null $idArtSpec = null): bool
Die komplette Liste:

Code: Alles auswählen

cCreateOrUpdateArtSpec(): contenido\includes\functions.general.php on line 974
cAsset::frontend(): contenido\classes\class.asset.php on line 103
cUri::appendParameters(): contenido\classes\uri\class.uri.php on line 333
cHTML::__construct(): contenido\classes\html\class.html.php on line 124
cApiImgCreateImageResourceFromFile(): contenido\includes\functions.api.images.php on line 815
cXmlBase::arrayToXml(): contenido\classes\xml\class.xml.base.php on line 228
cApiLayoutCollection::getAllUsedLayoutTypesPropertyValues(): contenido\classes\contenido\class.layout.php on line 112
cDate::formatToDate(): contenido\classes\class.date.php on line 179
Grüße aus dem Norden!
bodil
xmurrix
Beiträge: 3254
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Hat sich bedankt: 14 Mal
Danksagung erhalten: 49 Mal
Kontaktdaten:

Re: #528 - Überarbeitete Cookie-Konfiguration & Session-Logik

Beitrag von xmurrix »

Hallo bodil,

danke für das Feedback und für die Anmerkungen zu PHP 8.5.

In der Branch feature/529-php-84-support wurden unter anderem solche Probleme wie Parameterdeklaratioen mit impliziten Nulllwerten behoben. Da gibt es aber noch andere Baustellen, die auch angegangen wurden, wie z. B. Adaption der verwendeten Swift-Mailer Klassen auf PHP 8.4 und utf8_encode()/utf8_decode(), das seit PHP 8.2 als veraltet gekennzeichnet wurde, aber bisher nicht bearbeitet wurde.

Dazu gibt es auch ein Issue #529 PHP 8.4 support, an der seit geraumer Zeit gearbeitet wird.

Im Pull-Request feat: #529 - PHP 8.4 support #550 stehen die Details drin, die Beschreibung versuche ich auf dem aktuellen Stand zu halten.

Viele Grüße
Murat
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.
bodil
Beiträge: 394
Registriert: Fr 7. Okt 2011, 04:10
Hat sich bedankt: 10 Mal
Danksagung erhalten: 11 Mal
Kontaktdaten:

Re: #528 - Überarbeitete Cookie-Konfiguration & Session-Logik

Beitrag von bodil »

Ich bin auf weitere Deprecated-Meldungen gestoßen, die aber leicht zu beheben sind. Ich würde das auch gerne auf GitHub direkt machen. Gibt es eine Anleitung, wie das geht, ohne was kaputt zu machen? Ich weiß nicht mal, wie ich ein Ticket anlege ... ein Login habe ich jetzt.
Jedenfalls:

Code: Alles auswählen

PHP Deprecated:  Case statements followed by a semicolon (;) are deprecated, use a colon (:) instead in ...
contenido\classes\module\class.module.handler.php on line 1069
contenido\classes\module\class.module.handler.php on line 1072
contenido\classes\module\class.module.handler.php on line 1075
contenido\classes\module\class.module.handler.php on line 1078
contenido\classes\module\class.module.handler.php on line 1105
contenido\classes\module\class.module.handler.php on line 1107
contenido\classes\module\class.module.handler.php on line 1111
contenido\classes\module\class.module.handler.php on line 1115
xmurrix
Beiträge: 3254
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Hat sich bedankt: 14 Mal
Danksagung erhalten: 49 Mal
Kontaktdaten:

Re: #528 - Überarbeitete Cookie-Konfiguration & Session-Logik

Beitrag von xmurrix »

Hallo bodil,

danke für deine Unterstützung.

In CONTENIDO-GitHub-Projekt gibt es eine Datei, in der das beschrieben ist.

https://github.com/CONTENIDO/CONTENIDO/ ... IBUTING.md

Ich habe vorhin dazu auch ein Beitrag im Forum erstellt, da ist es auch grob beschrieben:

viewtopic.php?f=115&t=44908&p=183933

Das hier ist ein Fehler, daher solltest du hier ein Bug-Ticket erstellen.

Viele Grüße
Murat
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.
Antworten