Public Member Functions | Data Fields

Session Class Reference

"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

Detailed Description

"Manueller" Session-Fallback mit PHP4

Author:
Daniel T. Gorski <daniel.gorski@bluemars.de>

Definition at line 33 of file class.Session.php.


Member Function Documentation

Session::hidden (  ) 

Fallback via HIDDEN FIELD - wenn Cookies ausgeschaltet sind.

Ohne Cookies erfolgt Fallback via HTML-Hidden-Field (für Formulare)

Parameters:
void 
Returns:
string HTML-Hidden-Input-Tag mit der Session-ID

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.

Parameters:
string Ziel-Datei (z.B. "index.php")
Returns:
void

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 "?".

Parameters:
string String
Returns:
string String ohne abschließende "&" und "?"

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"

Parameters:
void 
Returns:
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 $_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.

Parameters:
string Ziel-Datei
Returns:
string Ziel-Datei mit - bei Bedarf - angehängter Session-ID

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:


Field Documentation

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.


The documentation for this class was generated from the following file: