phpbar.de logo

Mailinglisten-Archive

Re: [php] php5 klasse zur verwaltung von sessions über cookies und/oder datenbank

Re: [php] php5 klasse zur verwaltung von sessions über cookies und/oder datenbank

tommy bergi tommynocker at gmx.de
Die Okt 4 12:42:44 CEST 2005


Nils Leideck schrieb:

>
> Hallo miteinander,
>
> ich bin gerade an meiner ersten php5 anwendung dran.
> hier möchte ich natürlich jetzt auch klassen mehr denn je einsetzen...
>
> leider habe ich da so einige probleme mit der verarbeitung von sessions.
> ich habe mir schon sehr viele scripte angeschaut, leider alle in php4 ...
>
>
> folgender status:
>
> ich habe eine klasse SessionManager().
>
> auf einer index.php seite include ich diese und instanziiere ein objekt.
>
> -> require_once('session.inc.php');
> -> $sess_handler = new SessionManager();
>
> dann hab ich da ne funktion reingebastelt in der werte für
session_save_path(), session_name(), session_cache_limiter(), etc gesetzt
werden.
>
>
> folgendes problem:
>
> einige dieser werte werden leider nicht gesetzt wenn ich dann mit
session_start() (auch in der klasse als funktion und extra in der index.php
datei versucht) eine session starte.
>
> es wird überprüft ob $_SESSION[sign_in] = True;
> ansonsten include der login seite und exit;
>
> user und passwort werden hier überprüft (mysql) und wenn ok
$_SESSION['sign_in'] auf True setzen und wieder zurück zur index.php.
>
> jetzt wird hier aber die klasse neu instanziiert und die
$_SESSION['sign_in'] Variable ist nicht verfügbar ...
>
> ich möchte halt alles über die klasse lösen und nicht noch eine
startSession() function extra laden ...
>
> aber ich kriegs einfach nicht hin ...
>
> danke für jede hilfe !!!
>
>
> c ya
>
> Nils
>
>

Hi Ho Nils

Ich hoffe ich verstehe dein Problem richtig?


Ich habe es so gelöst:

Habe eine Klasse Session
/**************************************
<?PHP
class Session
{
   var $session_name = null;
     function open()
   {
      $aTime = 600;
      SESSION::gc( $aTime );
      return True;
   }
     function close()
   {
      return (true);
   }
     function read($aKey)
   {
       $query = "SELECT data FROM sessiondata WHERE id ='$aKey'";
       $busca = mysql_query($query) or die ("READ: ".mysql_error());
       if(mysql_num_rows($busca) == 1)
       {
            $r = mysql_fetch_array($busca);
             return $r['data'];
       }
       else
       {
           $query = "INSERT INTO sessiondata (id, expiry , data, start)
                VALUES ('$aKey', NOW(), '', NOW())";
           mysql_query($query)  or die ("READ-INSERT: ".mysql_error());
           return "";
       }
   }  
   function write( $aKey, $aVal )
   {
       $aVal = addslashes( $aVal );
         if($_SERVER["HTTP_X_FORWARDED_FOR"])
           $ip = $_SERVER["HTTP_X_FORWARDED_FOR"];
       else
           $ip = $_SERVER["REMOTE_ADDR"];
         $query = "UPDATE sessiondata SET data = '$aVal',            expiry
= NOW(),
           kundnr = '".$GLOBALS['kunde']->kundnr."',
           gruppe = '".$GLOBALS['kunde']->gruppe."',
           ip     = '".$ip."'
           WHERE id = '$aKey'";
       mysql_query($query) or die ("WRITE: ".mysql_error());
       return True;
   }

   function destroy( $aKey )
   {
       $query = "DELETE FROM sessiondata WHERE id = '$aKey'";
       mysql_query($query) or die ("DESTROY: <br>$query<br>".mysql_error());
      return True;
   }
              function gc( $aMaxLifeTime )
   {
       $query = "DELETE FROM sessiondata WHERE UNIX_TIMESTAMP(NOW()) -
UNIX_TIMESTAMP(expiry) > $aMaxLifeTime";
   mysql_query($query) or die ("GC: <br>$query<br>".mysql_error());
   return True;
   }   }
?>
*************************************/


Um PHP klar zu machen das er die session nutzen soll folgender code:

/**************************************
session_set_save_handler(
   array("Session", "open"),
   array("Session", "close"),
   array("Session", "read"),
   array("Session", "write"),
   array("Session", "destroy"),
   array("Session", "gc")
);

 session_start();
**************************************/

Also kein $s = new Session; ^^

in deinen Fall



/**************************************
session_set_save_handler(
   array("SessionManager", "Methode Für-open"),
   array("SessionManager", "Methode Für-close"),
   array("SessionManager", "Methode Für-read"),
   array("SessionManager", "Methode Für-write"),
   array("SessionManager", "Methode Für-destroy"),
   array("SessionManager", "Methode Für-gc")
);

 session_start();
**************************************/ 

MfG

Thomas Berg

-- 
Lust, ein paar Euro nebenbei zu verdienen? Ohne Kosten, ohne Risiko!
Satte Provisionen für GMX Partner: http://www.gmx.net/de/go/partner

php::bar PHP Wiki   -   Listenarchive