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