Mailinglisten-Archive |
> Ist es möglich die session informationen in einer mysql-table zu
> speichern anstatt in temporären files oder cookies? Hat das jemand schon
> gemacht?
Jawohl,
habe ich gerade gemacht, speichere allerdings nur eine $nutzer_id. Hat den
Vorteil, dass man die eingeloggten Nutzer anzeigen lassen kann. Allerdings ist
diese Version noch ein bisschen mit Problemen behaftet - Ein Nutzer kann sich
auch mehrmals einloggen...
Viel Spass damit,
clemens
//bei regulaerem Aufruf der Seite
$sid=sessionmanage($nutzer_id);
if ($sid) $self=$self."?PHPSESSID=".$sid; else $self.="?_";
//beim login
$nutzer_id=$row[nutzer_id];
$PHPSESSID=sessionmanage($nutzer_id,"create");
//bei Logout
sessionmanage($nutzer_id,'destroy');
function sessionmanage(&$nutzer_id,$aktion='')
{
global $PHPSESSID;
if ($aktion == 'create' && is_nutzer($nutzer_id))
{
mt_srand((double)microtime()*1000000);
$PHPSESSID = "sid". md5 (uniqid (mt_rand()));
$result = mysql_unbuffered_query ('INSERT INTO sessions SET sid
="'.$PHPSESSID.'", zeit ="'.time().'", nutzer_id="'.$nutzer_id.'"') or die
("urgs".mysql_error());
}
if (strlen($PHPSESSID) > 0)
{
if ($aktion == 'destroy') $result = mysql_unbuffered_query ('DELETE
FROM sessions where sid ="'.$PHPSESSID.'"') or die ("urgs".mysql_error());
//update der Session
if ($aktion == '')
{
$result = mysql_query ('UPDATE sessions SET zeit="'.time().'" where sid
="'.$PHPSESSID.'"') or die ("urgs".mysql_error());
if (mysql_affected_rows() == 1)//session ok
{
//holen der nutzer_id aus session-tabelle
$result = mysql_query ('SELECT nutzer_id FROM sessions where sid
="'.$PHPSESSID.'"') or die ("urgs".mysql_error());
while($row = mysql_fetch_array($result)){$nutzer_id=$row[nutzer_id];}
}else {
$PHPSESSID=false; //session nicht ok
$nutzer_id =''; //kein Missbrauch mit per GET uebergebenen IDs!
}
}
} else $nutzer_id =''; //kein Missbrauch mit per GET uebergebenen IDs!
//automatisch loeschen der alten Sessions ohne Aktualisierung
$loeschzeit=time()-(60*60*2); //2h Haltezeit
$result = mysql_unbuffered_query ('DELETE FROM sessions where zeit <
'.$loeschzeit) or die ("urgs".mysql_error());
return $PHPSESSID;
}
php::bar PHP Wiki - Listenarchive