"Manueller" Session-Fallback mit PHP4 More...
Public Member Functions | |
Session ($sessionName="SESSID") | |
Konstruktor - nimmt, wenn gewuenscht einen neuen Session-Namen entgegen. | |
sendNoCacheHeader () | |
Cacheing unterbinden. | |
redirectTo ($pathInfo) | |
HTTP-Redirect ausführen (header("Location: ..."). | |
removeTrail ($pathInfo) | |
Entfernt mögliche abschließende "&" und "?". | |
url ($pathInfo) | |
Fallback via GET - wenn Cookies ausgeschaltet sind. | |
hidden () | |
Fallback via HIDDEN FIELD - wenn Cookies ausgeschaltet sind. | |
Data Fields | |
$version = 106 | |
$usesCookies = false | |
$transSID = false |
"Manueller" Session-Fallback mit PHP4
Definition at line 33 of file class.Session.php.
Session::hidden | ( | ) |
Fallback via HIDDEN FIELD - wenn Cookies ausgeschaltet sind.
Ohne Cookies erfolgt Fallback via HTML-Hidden-Field (für Formulare)
void |
Definition at line 222 of file class.Session.php.
{ if ($this->usesCookies || $this->transSID) return ""; return "<INPUT type=\"hidden\" name=\"".session_name()."\" value=\"".session_id()."\">"; }
Session::redirectTo | ( | $ | pathInfo | ) |
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.
string | Ziel-Datei (z.B. "index.php") |
Definition at line 136 of file class.Session.php.
References exit.
Referenced by Session().
{ // Relativer Pfad? if ($pathInfo[0] != "/") { $pathInfo = substr(getenv("PATH_INFO"), 0, strrpos(getenv("PATH_INFO"),"/")+1 ) .$pathInfo; } // Läuft dieses Script auf einem non-standard Port? $port = !preg_match( "/^(80|443)$/", getenv("SERVER_PORT"), $portMatch) ? ":".getenv("SERVER_PORT") : ""; // Redirect header("Location: " .(($portMatch[1] == 443) ? "https://" : "http://") .$_SERVER["HTTP_HOST"].$port.$this->url($pathInfo)); exit; }
Session::removeTrail | ( | $ | pathInfo | ) |
Entfernt mögliche abschließende "&" und "?".
string | String |
Definition at line 168 of file class.Session.php.
Referenced by url().
{ $dummy = preg_match("/(.*)(?<!&|\?)/",$pathInfo,$match); return $match[0]; }
Session::sendNoCacheHeader | ( | ) |
Cacheing unterbinden.
Ergänze/Override "session.cache_limiter = nocache"
void |
Definition at line 114 of file class.Session.php.
Referenced by Session().
{ 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"); }
Session::Session | ( | $ | sessionName = "SESSID" |
) |
Konstruktor - nimmt, wenn gewuenscht einen neuen Session-Namen entgegen.
Definition at line 45 of file class.Session.php.
References $_GET, $_POST, $query, redirectTo(), and sendNoCacheHeader().
{ $this->sendNoCacheHeader(); // force 4 hash bits per character for session_id // Sascha Hofmann (2005-10-19) ini_set("session.hash_bits_per_character","4"); // Session-Namen setzen, Session initialisieren session_name(isset($sessionName) ? $sessionName : session_name()); @session_start(); // Prüen 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; 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()]) == 32 ) $IDpassed = true; if (!$IDpassed) { // Es wurde keine (gültige) Session-ID übergeben. // Script-Parameter der URL zufügen $query = @$_SERVER["QUERY_STRING"] != "" ? "?".$_SERVER["QUERY_STRING"] : ""; header("Status: 302 Found"); // Script terminiert $this->redirectTo($_SERVER["PHP_SELF"].$query); } // Wenn die Session-ID übergeben wurde, muss sie // nicht unbedingt gültig sein! // Für weiteren Gebrauch merken $this->usesCookies = (isset($_COOKIE[session_name()]) && @strlen($_COOKIE[session_name()]) == 32); }
Session::url | ( | $ | pathInfo | ) |
Fallback via GET - wenn Cookies ausgeschaltet sind.
string | Ziel-Datei |
Definition at line 180 of file class.Session.php.
References removeTrail().
{ if ($this->usesCookies || $this->transSID) 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; }
Session::$transSID = false |
Definition at line 36 of file class.Session.php.
Session::$usesCookies = false |
Definition at line 35 of file class.Session.php.
Session::$version = 106 |
Definition at line 34 of file class.Session.php.