[PHP] Grundsätzliches Problem mit Session IDs

Phil S.

Vice Admiral Special
Mitglied seit
26.12.2001
Beiträge
802
Renomée
5
Standort
Mittelfranken
Moin Moin,

ich programmiere aktuell mal wieder an meinem eigenen Weblog rum. Dazu verwende ich Sessions, in denen ich einige Einstellungen die der User in meinem Blog macht speichere. Diese Einstellungen werden dann beim Besuchen der Seite wiederhergestellt.Die Session ID wird in einem Cookie gespeichert.

Außerdem verwende ich mod_rewrite um schönere URLs zu bekommen. Die URL für das Archiv für April 2006 sieht z.B. so aus: http://www.domain.tld/archiv/2006/04//

Das Problem ist folgendes: Ich möchte auch berücksichtigen, dass ein Benutzer die Website in vollem Umfang nutzen kann, auch wenn er Cookies deaktiviert hat. Dazu führe ich dann (und nur dann) die Session ID in der URL mit. Um beim obrigen Beispiel zu bleiben, sähe die URL dann so aus: http://www.domain.tld/archiv/2006/04/eb8e7a0d74b601c4e0a23b8774b2cca5/

Problematisch ist das insofern, weil ich bisher noch keine 100%ig Lösung habe, wie ich das anstelle, dass die SID nur mit in der URL steht, wenn Cookies auch wirklich deaktiviert sind. Ich habe das momentan so gelöst:

PHP:
if(strlen($_COOKIE["PHPSESSID"])===32)
{
	$sid=$_COOKIE["PHPSESSID"];
}
elseif(strlen($_GET["PHPSESSID"])===32)
{
	$sid=$_GET["PHPSESSID"];
}

if($sid)
{
	session_id($sid);
}

session_start();

Das funktioniert soweit perfekt. Ich habe eine extra Funktion mit der ich Links erstelle. Diese Funktion überprüft auch, ob es die SID in die URL mit aufnehmen muss oder nicht.

Der einzige Fall wo es nicht funktioniert ist beim ersten Besuch der Seite mit aktivierten Cookies. Da bekomme ich immer URLs mit SID, obwohl ja eigentlich URLs ohne erzeugt werden sollten. Das ist klar, weil beim ersten Aufruf der Website das Cookie erst gesetzt wird und ich von daher noch nicht auslesen kann, ob das Cookie auch vom User akzeptiert wurde.

Hat hier jemand eine Idee wie ich das umgehen kann? Ich möchte einfach, dass jemand der Cookies akzeptiert von vornherein die richtigen URLs ohne SID bekommt.

Danke
Ciao
Phil
 
Zuletzt bearbeitet:
Du kannst mit der Variablen session.use_trans_sid (in der php.ini) einstellen, ob SIDs automatisch in der URL vorkommen sollen, wenn cookies deaktiviert sind. Ist es aktiviert, dann werden Cookies genommen.

Wenn Du auf die php.ini nicht zugreifen kannst, dann nutze doch:
PHP:
if (get_cfg_var('session.use_trans_sid') === false)
 {
  echo "Fehler! konnte auf Variable nicht zugreifen.";
 }
else if(get_cfg_var('session.use_trans_sid') === 0) 
 {
  // aktivieren
  ini_set('session.use_trans_sid', 1); 
 }

AndyK
 
Zuletzt bearbeitet:
Nabend Andy,

sorry, hab mich wohl etwas zu kompliziert ausgedrückt. Das Problem besteht nicht, wenn der User keine Cookies akzeptiert hat. Der User kommt das erste mal auf die Seite, und bekommt immer automatisch Links mit der SID. Dafür habe ich schon in meiner Funktion zum erstellen von Links gesorgt.
Das Problem ist, dass ein User mit aktivierten Cookies zum ersten mal auf die Seite kommt und dort auch Links mit SID bekommt, obwohl er ja Cookies aktiviert hat und ich die SID nicht in den Links mitspeichern müsste.

Ciao
Phil
 
Genau dafür ist doch use_trans_sid.
Du brauchst Dich dann überhaupt nicht mehr darum zu kümmern, ob eine SID in der URL mitgeschleift werden muss, oder nicht. Das übernimmt der php-Parser komplett transparent.
Somit kannst Du sowohl für Cookie Nutzer, als auch für nicht Cookie-Nutzer immer Links ohne SID generieren und der Parser ergänzt bei Bedarf die SID in der URL vollautomatisch.

AndyK
 
Zurück
Oben Unten