"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;
}
Here is the caller graph for this function:| 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];
}
Here is the caller graph for this function:| 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");
}
Here is the caller graph for this function:| Session::Session | ( | $ | sessionName = "SESSID" |
) |
Konstruktor - nimmt, wenn gewuenscht einen neuen Session-Namen entgegen.
Definition at line 45 of file class.Session.php.
References $_COOKIE, $_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);
}
Here is the call graph for this function:| 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;
}
Here is the call graph for this function:| 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.
1.7.1