PHP Maniac

Das PHP Blog für PHP-Profis und alle die es werden wollen

Vier Wege um PHP-Session-IDs aus den URLs zu entfernen

3 Mai, 2009 (22:29) | Code-Schnipsel, Grundlagen, Server, Tipps und Tricks | Von: PHP Maniac

Fast jeder, der schon einmal ein CMS für Suchmaschinenen optimieren wollte oder musste, wird das folgende Problem kennen: PHP hängt seine Session-IDs an alle Links auf einer Webseite an, wenn der Besucher keine Cookies aktiviert hat. Da die Crawler der Suchmaschinen natürlich keine Cookies akzeptieren, so sehen sie bei jedem Besuch die Links mit angehängter Session-ID. Dies wäre an sich noch nicht problematisch, doch bei jedem Besuch wird eine neue Session ID vergeben. Daher denken die Bots, dass es sich um einen neuen Link der Webseite handelt und fügen diesen eventuell dem Suchindex hinzu. Da der Inhalt der Webseiten jedoch, unabhängig von der Session ID, immer der gleiche ist, führt dies unter Umständen zu einer Abwertung der Webseite. Denn die Suchmaschinenen halten von Duplicate Content nicht besonders viel.

Um dieses Problem zu lösen gibt es einige Ansätze. Alle haben zur Folge, dass Benutzer mit deaktivierten Cookies nicht durch die Sessions erfasst werden. Dies lässt sich allerdings, meiner Meinung nach, vernachlässigen. Alle halbwegs aktuellen Browser können mit Cookies umgehen und die Benutzer, die aktiv Cookies blockieren lassen, wissen in der Regel über diesen Umstand bescheid. Sollten die deaktivierten Cookies also die Nutzbarkeit der Webseite einschränken, so wissen diese Benutzer warum und können ihre Cookies bei Bedarf wieder aktivieren.

Jetzt aber genug der Einleitung, im Folgenden stelle ich einige Methoden vor, welche das Problem mit der angehängten Session ID lösen kann. Welche Methode sich einsetzen lässt, hängt primär davon ab, was der Hoster seinen Kunden durchgehen lässt. Sollte eine nicht funktionieren, so kann es sich durchaus lohnen die anderen auch noch zu probieren.

Methode 1: php.ini

Sollte Zugriff auf die php.ini bestehen, so lässt sich die Session ID durch folgenden Eintrag aus den Links und somit der URL entfernen:

session.use_trans_sid = 0

Diese Methode funktioniert allerdings leider nur bis PHP 4.2.3 oder wenn PHP als CGI Modul installiert wurde. Ist dies nicht der Fall, so lässt sich das Problem mit einer der anderen 3 Methoden lösen.

Methode 2: vhost.conf / httpd.conf

Alternativ lässt sich auch über die Konfigurationsdateien von Apache das Session-Verhalten von PHP beeinflussen:

php_value session.use_trans_sid 0

Nachdem die ersten zwei Methoden eher für Webmaster mit Vserver oder Rootserver interessant sein dürften, folgen nun noch zwei weitere, die auch bei vielen normalen Webhostingkunden funktionieren sollten.

Methode 3: .htaccess

Viele Anbieter ermöglichen die Anpassung von PHP Einstellungen über die .htacces Dateien. Sollte noch keine .htaccess Datei existieren, so muss diese im Webroot erstellt werden. Es reicht hierbei einfach nur die folgende Zeile in die Datei zu kopieren:

php_value session.use_trans_sid 0

Methode 4: PHP Code

Sollten alle genannten Methoden nicht geholfen haben, so bleibt noch das selektive Deaktivieren der Session ID in URLs über PHP Befehle:

if (preg_match('/googlebot|msnbot|yahoobot/i', $_SERVER['HTTP_USER_AGENT']) === 1)
{
	ini_set("url_rewriter.tags","");
}

Hierbei wird der User-Agent des Benutzers mit der preg_match auf bekannte Bots geprüft. Ist der Besucher der Googlebot, MSN Bot oder Yahoobot, so werden die URL Session IDs für ihn deaktiviert. Bei normalen Benutzern verhält sich die Webseite wie gewohnt, da keine Änderung durchgeführt wird. Wichtig ist hierbei, dass der Beispielcode in einer zentralen Datei ganz am Anfang untergebracht wird. Es muss bei jedem Aufruf ausgeführt werden und vor einem möglichen session_start() ausgeführt werden. Bei CMS Systemen bietet sich hier z.B. die index.php oder eine, möglicherweise vorhandene, config.php an. Bei Websitebaker habe ich mit dem Einbinden in die config.php gute Erfahrungen gemacht. Alternativ sollte der Anfang der index.php aber in 99% der Fälle das gewünschte Ergebnis liefern.

Testen der Einstellung

Für einen schnellen Test bietet es sich an die eigene Webseite aufzurufen, ohne Cookies von dieser zu aktivieren. Bei Firefox lässt sich dies gut mit dem Addon „CookieSafe“ erledigen. Alternativ könnte man bei Opera den User-Agent auf „Googlebot“ setzen oder einfach warten ob bei Google die falschen URLs mit Session IDs nach und nach verschwinden. Abzuwarten ist jedoch keine besonders gute Option, da es sehr lange dauern kann, bis die gewünschten Änderungen eintreten. Da weiterhin nicht genau gesagt werden kann, wann Google die einzelnen Seiten neu Crawlt, kann auch nie genau gesagt werden, ob das Problem noch nicht gelöst ist oder ob Google schlichtweg noch nicht wieder auf der eigenen Webseite unterwegs war.

Be Sociable, Share!

Kommentare

Pingback von Nach Shopumstellung funktionieret die Weiterleitung nicht mehr.
Datum 26. Juni 2013 um 17:55 Uhr

[…] […]

Schreibe einen Kommentar