phpbar.de logo

Mailinglisten-Archive

[php] sessions mit mysql

[php] sessions mit mysql

Clemens Zvacek php_(at)_phpcenter.de
Thu, 22 Aug 2002 12:43:16 +0200


> 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