SessionID aus URL verbannen

sipoh

Erfahrenes Mitglied
Hallo,

ich habe sporadisch an meinen URLs folgenden weiteren (nicht durch mich gesetzten) Parameter:

url.php?..&PHPSESSID=5c1ffd4b80f8523d020898443d10b8de

Wie kann ich das verhindern?
 
Überprüfe mal deine PHP-Einstellungen, ob session.use_cookies, session.use_only_cookies und session.cookie_httponly eingeschalten sind.
 
Ich habs jetzt mit diesem Script probiert:

Code:
//Determine current URL
$URL = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
 
//Decode and clean URL
$URL = urldecode ($URL);
$URL = str_replace ('&', '&', $URL);
 
//Check if PHP is not in safe mode,
//and PHPSESSID is passed via URL
if (!ini_get ('safe_mode') && preg_match ('#'.session_name().'=([^=&\s]*)#i', $URL))
{
   //Remove PHPSESSID junk and unneeded characters ("&" or "?") at end of URL
   $URL = preg_replace ( array ('#(\?|&)'.session_name().'=([^=&\s]*)#', '#(&|\?)+$#'), '', $URL);
   //Send Moved Permanently header
   @ header ("HTTP/1.1 301 Moved Permanently");
   //Redirect to clean URL
   @ header ("Location: " . trim ($URL));
   //End current script
   exit();
}
 
Hi Sipoh!

Einfach die SessenID, aus der URL verbannen, wird aber eine Lösung sein, die dich auf keinen Fall glücklich machen wird. Weil sich dann keiner mehr einloggen kann und vieles anderes eventuell nicht mehr funktionieren wird.

Du kannst mal versuchen, was passiert, wenn du folgenden Code mit // am anfang jeder Zeile deaktivierst.

PHP:
//Check if PHP is not in safe mode,
//and PHPSESSID is passed via URL
if (!ini_get ('safe_mode') && preg_match ('#'.session_name().'=([^=&\s]*)#i', $URL))
{
   //Remove PHPSESSID junk and unneeded characters ("&" or "?") at end of URL
   $URL = preg_replace ( array ('#(\?|&)'.session_name().'=([^=&\s]*)#', '#(&|\?)+$#'), '', $URL);
   //Send Moved Permanently header
   @ header ("HTTP/1.1 301 Moved Permanently");
   //Redirect to clean URL
   @ header ("Location: " . trim ($URL));
   //End current script
   exit();
}

Wenn dann schon die SessionID aus der URL überall verbannt wurde, brauchst du nicht nach weiteren Codes suchen und du wirst feststellen, dass du vielleicht auf einer Seite noch eingeloggt warst, aber auf der nächsten bereits wieder ausgeloggt bist.

Wenn dies der Fall ist, mußt du in jeder Datei, wo die session_name() drin steht, dies in $_SESSION['name_des_sessionteils'] umändern.

Solltest du einen Code dabei entdecken, der die session_name() verschlüssel, so kannst du diesen auch deaktivieren, weil diese SessionID nun nicht mehr öffentlich in der URL mit übertragen wird, sondern für die User unsichtbar zwischengespeichert wird.

Ich hoffe, dass dies deine gesuchte Lösung ist.

Gruß Matze202.
 
Zurück