|
Categorieën >
PHP & SQL
sessies in een database
roy – 12/04/2010 21:47 (Laatst gewijzigd op 24/04/2010 18:18)
|
|
offline
|
PHP gevorderde
|
Hoi,
Ik bewaar de sessies in de database, IPV in een bestand op de server.
ik gebruik de volgende code:
<?php
class session {
var $conn;
function session($conn) {
$this->conn = $conn;
}
function adodb_sess_open($save_path, $session_name) {
return true;
}
function adodb_sess_close() {
global $ADODB_SESS_CONN;
if ($ADODB_SESS_CONN)
$ADODB_SESS_CONN->Close();
return true;
}
function adodb_sess_read($key) {
global $ADODB_SESS_CONN,$ADODB_SESS_INSERT;
echo $rs = $this->conn->Execute("SELECT data FROM sessions WHERE sesskey = '$key' AND expiry >= ".time());
if ($rs) {
$v = $rs->fields[0];
if ($rs->EOF)
$ADODB_SESS_INSERT = true;
$rs->Close();
return ($v) ? $v : '';
}
$ADODB_SESS_INSERT = true;
return false;
}
function adodb_sess_write($key, $val) {
global $ADODB_SESS_INSERT,$ADODB_SESS_CONN,$ADODB_SESS_LIFE;
//$expiry = time() + get_cfg_var("session.gc_maxlifetime");
$expiry = time() + 5;
echo $expiry;
$qry = "UPDATE sessions SET expiry=$expiry,data=".$this->conn->qstr($val, get_magic_quotes_runtime())." WHERE sesskey='$key'";
echo $qry;
$rs = $this->conn->Execute($qry);
if ($rs)
$rs->Close();
if ($ADODB_SESS_INSERT || $rs === false) {
echo $qry = "INSERT INTO sessions VALUES ('$key',$expiry,".$this->conn->qstr($val, get_magic_quotes_runtime()).")";
$rs = $this->conn->Execute($qry);
if ($rs)
$rs->Close();
}
return isset($rs);
}
function adodb_sess_destroy($key) {
global $ADODB_SESS_CONN;
$qry = "DELETE FROM sessions WHERE sesskey = '$key'";
$rs = $this->conn->Execute($qry);
if ($rs)
$rs->Close();
return $rs;
}
function adodb_sess_gc($maxlifetime) {
global $ADODB_SESS_CONN;
$qry = "DELETE FROM sessions WHERE expiry < ".time();
$rs = $this->conn->Execute($qry);
if ($rs)
$rs->Close();
return true;
}
}
?>
<?php class session { var $conn; function session($conn) { $this->conn = $conn; } function adodb_sess_open($save_path, $session_name) { return true; } function adodb_sess_close() { if ($ADODB_SESS_CONN) $ADODB_SESS_CONN->Close(); return true; } function adodb_sess_read($key) { global $ADODB_SESS_CONN,$ADODB_SESS_INSERT; echo $rs = $this->conn->Execute("SELECT data FROM sessions WHERE sesskey = '$key' AND expiry >= ".time()); if ($rs) { $v = $rs->fields[0]; if ($rs->EOF) $ADODB_SESS_INSERT = true; $rs->Close(); return ($v) ? $v : ''; } $ADODB_SESS_INSERT = true; return false; } function adodb_sess_write($key, $val) { global $ADODB_SESS_INSERT,$ADODB_SESS_CONN,$ADODB_SESS_LIFE; //$expiry = time() + get_cfg_var("session.gc_maxlifetime"); $qry = "UPDATE sessions SET expiry=$expiry,data=".$this->conn->qstr($val, get_magic_quotes_runtime())." WHERE sesskey='$key'"; $rs = $this->conn->Execute($qry); if ($rs) $rs->Close(); if ($ADODB_SESS_INSERT || $rs === false) { $rs = $this->conn->Execute($qry); if ($rs) $rs->Close(); } } function adodb_sess_destroy($key) { $qry = "DELETE FROM sessions WHERE sesskey = '$key'"; $rs = $this->conn->Execute($qry); if ($rs) $rs->Close(); return $rs; } function adodb_sess_gc($maxlifetime) { $qry = "DELETE FROM sessions WHERE expiry < ".time(); $rs = $this->conn->Execute($qry); if ($rs) $rs->Close(); return true; } } ?>
Hoe weet ik op een volgende pagina welke sessie van mij is, zodat ik kan checken of mijn sessie nog bestaat ?
Grt,
Roy |
23 antwoorden
|
|
|
offline
|
Project Manager
|
Je zal dan iets moeten hebben op de computer van de bezoeker, om deze te kunnen identificeren. Je mag zelf 1 keer raden wat dat is ;)
|
|
|
|
offline
|
PHP beginner
|
Je kan je sessies gaan beheren door ze in een database op te slaan, op die manier kan je zelf wat extra managment gaan toepassen. Je zal echter wel nog steeds beroep moeten doen op de sessie functionaliteit van de server, en dus via de sessionId telkens de gegevens uit de database moeten gaan halen bij iedere call.
|
Raze – 13/04/2010 16:18
|
|
offline
|
PHP beginner
|
idd, sessies blijven zelf nodig, of gegevens opslaan via een cookie, maar cookies zijn manipuleerbaar, wat het al een stuk onveiliger maakt.
|
roy – 13/04/2010 22:02
|
|
offline
|
PHP gevorderde
|
Hoe werkt dat dan?
Ik maak bijvoorbeeld een sessie:
$_SESSION['user'] = "Tester";
Hoe kan ik deze waarde op de volgende pagina weer ophalen ?
Het session_id() is 8eh337ukncti75m76rrtb4jj14
Graag wat uitleg over hoe ik dit kan realiseren.
Grt,
Roy de Kleijn
|
|
|
|
offline
|
PHP beginner
|
Voorbeeldje:
Gebruiker logt in:
- creatie sessie dus heb je een session_id
- schrijf gegevens weg in de database met de bijhorende session_id
Gebruiker gaat naar pagina 2;
- je hebt je session_id nog dus doe je een query op je database met als key die session_id om de data op te halen.
|
|
|
|
offline
|
MySQL beginner
|
@roy..
Sessies zijn bedoelt om lang mee te gaan.
session_id() verandert dus niet =)
|
|
|
|
offline
|
PHP expert
|
|
roy – 16/04/2010 22:01 (Laatst gewijzigd op 17/04/2010 21:40)
|
|
offline
|
PHP gevorderde
|
OK, maar hoe haal je nu de waarden uit de sessie op de tweede pagina ?
Kan je misschien een voorbeeldje geven?
|
|
|
|
offline
|
PHP beginner
|
roy schreef: OK, maar hoe haal je nu de waarden uit de sessie op de tweede pagina ?
Kan je misschien een voorbeeldje geven?
Iets in de aard van "SELECT velden FROM mijnsessietabel WHERE session_id= uw session_id()"
Toch niet zo moeilijk? Bij het inloggen schrijf je gegevens weg in de tabel met als key uw session_id, op al de andere pagina's kan je aan de hand van die session_id gewoon een query doen op die tabel eh voila je hebt al de gegevens van uw sessie die je op een vorige pagina al had weggeschreven.
|
roy – 18/04/2010 16:09
|
|
offline
|
PHP gevorderde
|
ok,
<?PHP
function sess_read($sess_id) {
global $dbc;
print "Session read.\n";
$sQuery = "SELECT data FROM sessions WHERE id='".mysql_real_escape_string($sess_id)."'";
$rs = $this->conn->GetAll($sQuery);
if (count($rs) == 1) {
list($data) = $rs;
return $data;
} else {
return '';
}
}
?>
<?PHP function sess_read($sess_id) { $rs = $this->conn->GetAll($sQuery); return $data; } else { return ''; } } ?>
Overschrijft de standaard sessie functie. Hoe gebruik ik deze eenvoudig ?
Heeft iemand ervaring met het opslaan van sessies in een database, door middel van de "session_set_save_handler". Kan diegene dan wat uitleg geven.
Alvast bedankt,
Roy
|
Dit onderwerp is gesloten.
|
|
|