RSS Session ID ohne Cookie

verfasst 29.01.2009 von MediaCix | kurze URL: /t577 | Kommentar schreiben

Hin wieder möchte man eine Website so gestalten, dass auch Benutzer ohne Cookies die Website besuchen können, wenn das System auf Session basiert. In einigen Shops ist das zum Beispiel der Fall. Dann wird anstelle vom Session-Cookie an alle Links und Formulare automatisch eine SSID angehangen. Der Vorteil, der Benutzer kann Cookies deaktivieren. Allerdings hat diese Lösung auch Nachteile. Zum einen ist das ganze leicht manipulierbar und zum anderen werden dadurch SEO-URLs zerstört. Letzteres geht erst wieder über zusätzliche Abfragen zu beheben. Im Anschluss ein ganz ganz ganz einfaches Beispiel wie man dies mit PHP und output_add_rewrite_var() umsetzen könnte.

Die folgenden Zeilen müssen ganz an den Anfang vom jeweiligen PHP-Script geschrieben werden!
Wichtig ist dabei, dass davor keine HTML-Ausgaben, Fehlermeldungen, Zeilenumbrüche oder Leerzeichen stehen. Auch UTF8 (BOM = Byte Order Mark) Zeichen in Dateien dürfen hier nicht vorkommen.

» PHP
<?php
session_start
();

if ( !isset(
$_COOKIE['PHPSESSID']) ) {

 if ( isset(
$_GET['SSID']) ) {
  
output_add_rewrite_var'SSID'$_GET['SSID'] );
 } else {
  
output_add_rewrite_var'SSID'session_id() );
 }

}
?>


Zusätzlich kann man die 32-stellige SSID noch abfragen. Sie muss exakt 32 Stellen haben und kann Zahlen von 0 bis 9 sowie Buchstaben von a bis f haben. Und anstelle von $_GET wird nach $_REQUEST (beinhaltet $_POST und $_GET) abgefragt.

» PHP
<?php
session_start
();

if ( !isset(
$_COOKIE['PHPSESSID']) ) {

 if ( isset(
$_REQUEST['SSID']) && preg_match('~^[0-9a-f]{32}$~',$_REQUEST['SSID']) ) {
  
output_add_rewrite_var'SSID'$_REQUEST['SSID'] );
 } else {
  
output_add_rewrite_var'SSID'session_id() );
 }

}
?>


Erst nach diesen Zeilen kann dann der eigentliche HTML-Code oder weitere PHP-Scripte eingsetzt werden. Zusätzlich können die Abfragen noch mit trim() oder strip_tags() verfeinert werden.

Was macht nun das Beispiel genau?

Zuerst wird generell die Session mit session_start() gestartet. Dann wird abgefragt ob ein Cookie mit Name PHPSESSID (Bezeichnung von einen Session-Cookie) vorhanden ist. Mit !isset() wird nach dem Gegenteil abgefragt - also ist das Cookie nicht vorhanden dann führe folgende Anweisung durch.

Jetzt wird mit $_REQUEST['SSID'] abgefragt, ob eine POST- oder GET-Parameter mit Name SSID übergeben wurde. Ist dies der Fall, dann wird mit output_add_rewrite_var() an alle Links und Formulare ein zusätzlicher Parameter mit dem Inhalt von $_REQUEST['SSID'] automatisch angehangen. Diese Abfrage ist wichtig, sonst wird bei jedem Klick eine neue Session-ID erzeugt, was aber nicht gewollt ist.

Wird bei $_REQUEST['SSID'] kein Wert übergeben bzw. ist $_REQUEST['SSID'] gar nicht vorhanden, dann wird mittels output_add_rewrite_var() die akteulle Session-ID als Parameter definiert und auch an alle Links und Formulare angehangen.

Das wars schon ...

PS: Hin und wieder den eigenen Kopf benutzen, anstelle von Kopieren und Einfügen!

neuen Kommentar schreiben

Ich möchte automatisch eine E-Mail bei neuen Kommentaren erhalten.



Themen mit ähnlichen Inhalten


Tags zum Beitrag

session-id     cookie     output_add_rewrite_var     byte-order-mark