Validierung: URLs mit & und PHPSESSID

Fragen zur Implementierung und/oder Anpassung von ConPresso 4 werden in diesem Forum diskutiert.
Antworten
AndreasM
ConPresso-User
Beiträge: 25
Registriert: 10.03.2007 18:11

Validierung: URLs mit & und PHPSESSID

Beitrag von AndreasM »

In welchen Dateien kann ich ConPresso dahin gehend ändern, dass ich meine XHTML Transitional-Seiten validiert bekomme?

Der CSS-Validator moniert "The reference to entity "PHPSESSID" must end with the ';' delimiter." (muss behoben werden, bevor er mein CSS validieren kann).

Der XHTML-Validator moniert die "&" in den URLs, die laut XHTML-Spezifikation mit "&" umgesetzt werden müssten.

Wäre dankbar für den entscheidenden Hinweis...
Benutzeravatar
Matthias V
Modul-Entwickler
Beiträge: 1251
Registriert: 01.01.1970 01:00
Wohnort: Sondershausen
Hat sich bedankt: 54 Mal
Danksagung erhalten: 147 Mal
Kontaktdaten:

Beitrag von Matthias V »

mod_Guestbook 4.1.0

Features:
- Einträge als ConPresso-Artikel
- benutzt Templates, Rubriken, ...
- Captcha
- BB-Code + Smilies + Zitieren
- Badwords
- Anonymisierung
AndreasM
ConPresso-User
Beiträge: 25
Registriert: 10.03.2007 18:11

Beitrag von AndreasM »

Danke für den Tip.

Leider ist das Ergebnis (nach Raufkopieren der .htaccess-Datei) bei mir das gleiche wie bei den anderen damals: Internal Server Error.

Aber das betrifft ja "nur" die "&" in der URL. Gibt es irgendwelche Ideen, wie man die PHPSESSID mit einem ";" abschließen lassen kann?
Benutzeravatar
balu
ConPresso-Entwickler
Beiträge: 1748
Registriert: 01.01.1970 01:00
Hat sich bedankt: 81 Mal
Danksagung erhalten: 133 Mal

Beitrag von balu »

Aloha,

ich hatte gerade ueberlegt, ob man da was mit einem Output-Buffer machen kann, aber das wird wohl nichts, weil das &PHPSESSID ja erst angehaengt wird, wenn PHP die Seite erstellt hat.

Bei welchem Hoster bist Du? Kann man da nicht die Einstellung aendern lassen - vielleicht nur fuer Deinen Webspace?

Grundsaetzlich wird das PHPSESSID ja vom PHP auch nur angehaengt, wenn keine Cookies verfuegbar sind. Ich vermute, dass das leider bei den Validatoren der Fall ist.

Balu
AndreasM
ConPresso-User
Beiträge: 25
Registriert: 10.03.2007 18:11

Beitrag von AndreasM »

Inzwischen habe ich das Problem etwas eingegrenzt: Die Probleme mit der PHPSESSID habe ich nur, wenn ich die www.pecherundpartner.de/index.php in den Validator eingebe (momentan habe ich noch eine normale index.html als Warteseite).

Gibt man diese URL in den Browser ein, erfolgt die Weiterleitung auf meine ConPresso-interne Startseite a la www.pecherundpartner.de/de/index.php?rubric=home
Gebe ich diese ConPresso-URL in den Validator ein, ist alles bestens.

Ich vermute also, dass die ConPresso-Weiterleitung von der index.php in bestimmten Fällen eine PHPSESSID anhängt. Bestimmte Fälle daher, da ich das mal von semf beschriebene "Druckfunktion in ConPresso4" verwende. Sämtliche vom Validator beanstandeten Stellen haben anscheinend mit dieser Funktion zu tun:

Code: Alles auswählen

Error  Line 51 column 64: general entity "PHPSESSID" not defined and no default entity.
...href="indexprint.php?rubric=home_de&PHPSESSID=8354089c80fe70f075affc414a0f1d
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7362
Registriert: 01.01.1970 01:00
Hat sich bedankt: 111 Mal
Danksagung erhalten: 934 Mal
Kontaktdaten:

Beitrag von MarkusR »

Da wird es schon klarer...

wird möglicherweise dieser Link durch ein http-include erzeugt?

Dann muß ja Dein Server bei sich selbst eine Seite via http anfordern (statt sie als php-Datei direkt zu includen). Ein PHP-include nimmt allerdings keinerlei Cookies an und provoziert demzufolge zwangsläufig die Session-ID (ich habe das auch gerade bei einem Projekt beobachtet, aber mich stört das nicht...)
Ciao Markus
ConPresso-Module

Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!

Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
AndreasM
ConPresso-User
Beiträge: 25
Registriert: 10.03.2007 18:11

Beitrag von AndreasM »

Ich blicke da leider nicht ganz durch, was sich da alles abspielt, aber der Quellcode (im _local_header.php) der die Druckfunktion aufruft lautet:

Code: Alles auswählen

<div id="print">
				<?php if (stristr($_SERVER['PHP_SELF'],'detail.php')) {
					$printfile = 'detailprint.php';
					} else {
					$printfile = 'indexprint.php';
					}
					if (!empty($_SERVER["QUERY_STRING"])) {
					$printfile .= '?'.$_SERVER["QUERY_STRING"];
					}
					echo '<a title="Druckansicht" href="'.$printfile.'" target="_blank"><img src="../images/basic/icon_print.gif" alt="Drucker-Icon" width="16" height="18" class="icon" border="0"/>Seite drucken</a>';
				?>
			</div><!-- end print -->
AndreasM
ConPresso-User
Beiträge: 25
Registriert: 10.03.2007 18:11

Beitrag von AndreasM »

Noch ein Nachtrag:
Diese Funktion ist wie gesagt vollkommen in Ordnung auf allen weiteren Seiten. Nur auf der index.php erzeugt sie die URL mit der PHPSESSID...
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7362
Registriert: 01.01.1970 01:00
Hat sich bedankt: 111 Mal
Danksagung erhalten: 934 Mal
Kontaktdaten:

Beitrag von MarkusR »

Hmmm... die Session-ID wird bei der Weiterleitung anghängt und dann später normalerweise automatisch entfernt. Das verwendete Script hängt sie aber wieder an, daher solltest Du mal versuchen, ob man sie einfach im Vorfeld schon entfernt und die Zeile in CONPRESSO_DIR/index.php

Code: Alles auswählen

header('Location: '.BASE_ABS.$cpoSystem['homepage'].(stristr(BASE_ABS.$cpoSystem['homepage'], '?')===FALSE ? '?'.SID : '&'.SID));
ändert in

Code: Alles auswählen

header('Location: '.BASE_ABS.$cpoSystem['homepage']);
Ciao Markus
ConPresso-Module

Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!

Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
AndreasM
ConPresso-User
Beiträge: 25
Registriert: 10.03.2007 18:11

Beitrag von AndreasM »

Super! Danke, das war der richtige Tipp, jetzt ist der Validator (und der Administrator auch ;-) ) zufrieden!
Benutzeravatar
balu
ConPresso-Entwickler
Beiträge: 1748
Registriert: 01.01.1970 01:00
Hat sich bedankt: 81 Mal
Danksagung erhalten: 133 Mal

Beitrag von balu »

Hallo,

koenntest Du mal das folgende Code-Fragment probieren?

Code: Alles auswählen

if (SID!='')
    header('Location: '.BASE_ABS.$cpoSystem['homepage'].(stristr(BASE_ABS.$cpoSystem['homepage'], '?')===FALSE ? '?'.SID : '&'.SID));
else
    header('Location: '.BASE_ABS.$cpoSystem['homepage']);
Ich bin nach Lesen der PHP-Dokumentation eigentlich davon ausgegangen, dass ich einen leeren String (SID='') einfach anhaengen darf. Denn die Konstante SID sollte eigentlich nur gesetzt sein, wenn der Cookie-Mechanismus nicht funktioniert.

Aus irgendeinem Grund scheint PHP das aber doch anders zu machen?

Ich vermute, dass der trans_sid-Mechanismus da noch zwischenfunkt.

Balu
AndreasM
ConPresso-User
Beiträge: 25
Registriert: 10.03.2007 18:11

Beitrag von AndreasM »

Hallo Balu,

zuerst funktionierte es nicht, aber dann kam ich auf den Trichter, das &-Zeichen korrekt für die URL zu setzen (&) und siehe da: es validiert einwandfrei!

Code: Alles auswählen

require_once('_include/common.inc.php');
if (SID!='')
    header('Location: '.BASE_ABS.$cpoSystem['homepage'].(stristr(BASE_ABS.$cpoSystem['homepage'], '?')===FALSE ? '?'.SID : '&'.SID));
else
    header('Location: '.BASE_ABS.$cpoSystem['homepage']);?>
Leider bin ich ein typischer PHP-Probierer und -Bastler und kann mich ein wenig durchkämpfen, aber bei der von dir angesprochenen Thematik muss ich leider passen.

Ich hoffe, mein Test hat trotzdem zu einer kleinen Erhellung der Thematik beigetragen ;-)
Benutzeravatar
balu
ConPresso-Entwickler
Beiträge: 1748
Registriert: 01.01.1970 01:00
Hat sich bedankt: 81 Mal
Danksagung erhalten: 133 Mal

Beitrag von balu »

Aloha,

das ist interessant. Ich haette nicht gedacht, dass in einem Header-Feld auch die HTML-Entities ersetzt werden muessen. Denn bei denen handelt es sich ja nicht um HTML-Code.

Balu
radamazone
ConPresso-Checker
Beiträge: 101
Registriert: 01.01.1970 01:00
Hat sich bedankt: 6 Mal

Ampersands in URLs

Beitrag von radamazone »

Hallo,

bei mir hat folgendes geholfen:

In die Datei _include/constants.inc.php, folgendes nach

Code: Alles auswählen

if (!defined('CPO')) exit;
einfügen:

Code: Alles auswählen

ini_set('arg_separator.output', '&');
Grüsse

Sandra
Antworten