class Session {
var $usesCookies = false;
function Session($sessionName="bp", $disableTransSID=true, $debug=false, $seite = null) {
global $_POST, $_GET, $_COOKIE;
if ($disableTransSID) ini_set("session.use_trans_sid","0");
$this->sendNoCacheHeader();
// Session-Namen setzen, Session initialisieren
session_name(isset($sessionName) ? $sessionName : session_name());
@session_start();
// workaround nach Migration, weg mit diesem Mist!
// Prüfen ob die Session-ID die Standardlänge von 32 Zeichen hat,
// ansonsten Session-ID neu setzen
// if (strlen(session_id()) != 32)
// {
// mt_srand ((double)microtime()*1000000);
// session_id(md5(uniqid(mt_rand())));
// }
// Prüfen, ob eine Session-ID übergeben wurde (über Cookie, POST oder GET)
$IDpassed = false;
// workaround nach Migration, Session ID strlen >0 ist auch ok...
// if (isset($_GET [session_name()]) && @strlen($_GET [session_name()]) != 32) $IDpassed = true;
// if (isset($_COOKIE[session_name()]) && @strlen($_COOKIE[session_name()]) != 32) $IDpassed = true;
// if (isset($_POST [session_name()]) && @strlen($_POST [session_name()]) != 32) $IDpassed = true;
if (isset($_GET [session_name()]) && @strlen($_GET [session_name()]) >0) $IDpassed = true;
if (isset($_COOKIE[session_name()]) && @strlen($_COOKIE[session_name()]) >0) $IDpassed = true;
if (isset($_POST [session_name()]) && @strlen($_POST [session_name()]) >0) $IDpassed = true;
if (!$IDpassed)
{
// Es wurde keine (gültige) Session-ID übergeben.
// Script-Parameter der URL zufügen
// Debug-Log
if ($debug) error_log(date ("[d.m.Y H:i:s]")." - '".getenv("SERVER_NAME").
getenv("SCRIPT_NAME")."' created a new Session-ID.\n",3,"session.log");
$query = getenv("QUERY_STRING") != "" ? "?".getenv("QUERY_STRING") : "";
header("Status: 302 Found");
$this->redirectTo(getenv("SCRIPT_NAME").$query); // Script terminiert
}
// Wenn die Session-ID übergeben wurde, muß sie
// nicht unbedingt gültig sein!
// Für weiteren Gebrauch merken
$this->usesCookies = ( isset($_COOKIE[session_name()]) && @strlen($_COOKIE[session_name()]) == 32);
}
### -------------------------------------------------------
/**
* Cacheing unterbinden
*
* Ergänze/Override "session.cache_limiter = nocache"
*
* @param void
* @return void
*/
function sendNoCacheHeader() {
header("Expires: Sat, 05 Aug 2000 22:27:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-cache, must-revalidate");
header("Pragma: no-cache");
header("Cache-Control: post-check=0, pre-check=0");
}
### -------------------------------------------------------
/**
* HTTP-Redirect ausführen (header("Location: ...")
*
* Diese Methode berücksichtigt auch nicht-standard Ports
* und SSL. Ein GET-Parameter beim wird bei Bedarf
* (Session-ID-Fallback) an die URI drangehängt. Nach
* dem Aufruf dieser Methode wird das aktive Script
* beendet und die Kontrolle wird an das Ziel-Script
* übergeben.
*
* @param string Ziel-Datei (z.B. "index.html")
* @return void
*/
function redirectTo($pathInfo) {
// Relativer Pfad?
if ($pathInfo[0] != "/")
{ $pathInfo = substr(getenv("SCRIPT_NAME"),
0,
strrpos(getenv("SCRIPT_NAME"),"/")+1
)
.$pathInfo;
}
// Läuft dieses Script auf einem non-standard Port?
$port = !preg_match("/^(80|443)$/",getenv("SERVER_PORT"),$portMatch)
? ":".getenv("SERVER_PORT")
: "";
$server_path = getenv("SERVER_NAME").$port.$this->url($pathInfo);
// Redirect
$redirect = "Location: "
.(($portMatch[1] == 443) ? "https://" : "http://")
.$server_path;
header($redirect);
exit;
}
### -------------------------------------------------------
/**
* Entfernt mögliche abschließende "&" und "?"
*
* @param string String
* @return string String ohne abschließende "&" und "?"
*/
function removeTrail($pathInfo) {
$dummy = preg_match("/(.*)(?usesCookies || ini_get("session.use_trans_sid")) return $pathInfo;
// Anchor-Fragment extrahieren
$dummyArray = split("#",$pathInfo);
$pathInfo = $dummyArray[0];
// evtl. (kaputte) Session-ID(s) aus dem Querystring entfernen
$pathInfo = preg_replace("/[?|&]".session_name()."=[^?|&]*/","",$pathInfo);
// evtl. Query-Delimiter korrigieren
if (preg_match("/&/",$pathInfo) && !preg_match("/\?/",$pathInfo))
{
// 4ter Parameter für "preg_replace()" erst ab 4.0.1pl2
$pathInfo = preg_replace("/&/","?",$pathInfo,1);
}
// Restmüll entsorgen
$pathInfo = $this->removeTrail($pathInfo);
// Session-Name und Session-ID frisch hinzufügen
$pathInfo .= preg_match("/\?/",$pathInfo) ? "&" : "?";
$pathInfo .= session_name()."=".session_id();
// Anchor-Fragment wieder anfügen
$pathInfo .= isset($dummyArray[1]) ? "#".$dummyArray[1] : "";
return $pathInfo;
}
### -------------------------------------------------------
/**
* Fallback via HIDDEN FIELD - wenn Cookies ausgeschaltet sind
*
* Ohne Cookies erfolgt Fallback via HTML-Hidden-Field
* (für Formulare)
*
* @param void
* @return string HTML-Hidden-Input-Tag mit der Session-ID
*/
function hidden() {
if ($this->usesCookies || ini_get("session.use_trans_sid")) return "";
return '';
}
### -------------------------------------------------------
/**
* Variable korrekt registrieren
*
* Wenn PHP mit "register_globals=Off" konfiguriert ist,
* ist das Session-Management ein wenig broken.
* Diese Methode korrigiert das indem sie eine Referenz
* zum $HTTP_SESSION_VARS-Hash erzwingt, der dann korrekt
* gespeichert wird.
*
* @param string Beliebige Anzahl von Variablennamen,
* die "registriert" werden sollen
* @return void
*/
function register() {
foreach(func_get_args() as $arg)
session_register($arg);
if (!ini_get("register_globals") || strtolower(ini_get("register_globals")) == 'off')
{
// Keine Überraschungen in zuküftigen
// PHP-Versionen erwünscht.
$oldLevel = error_reporting(0);
foreach(func_get_args() as $arg)
$GLOBALS["HTTP_SESSION_VARS"][$arg] = &$GLOBALS[$arg];
error_reporting($oldLevel);
}
}
### -------------------------------------------------------
/**
* Variable aus den Session-Daten löschen
*
* Wenn PHP mit "register_globals=Off" konfiguriert ist,
* ist das Session-Management ein wenig broken.
* Diese Methode korrigiert das indem sie den entsprechenden
* Index im $HTTP_SESSION_VARS-Hash löscht.
*
* @param string Beliebige Anzahl von Variablennamen,
* die "unregistriert" werden sollen
* @return void
*/
function unregister() {
foreach(func_get_args() as $arg)
{
session_unregister($arg);
$keyIndex = array_keys(array_keys($GLOBALS["HTTP_SESSION_VARS"]), $arg);
if (sizeof($keyIndex) == 0) continue;
array_splice($GLOBALS["HTTP_SESSION_VARS"], $keyIndex[0], 1);
}
}
} // of class
?>
Fatal error: Uncaught Error: Class "Session" not found in /var/www/vhosts/diddle.ruhr.de/site1/zbp/login.php:18
Stack trace:
#0 {main}
thrown in /var/www/vhosts/diddle.ruhr.de/site1/zbp/login.php on line 18