Mailinglisten-Archive |
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