sessies in een database
roy - 12/04/2010 21:47 (laatste wijziging 24/04/2010 18:18)
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
Gesponsorde links
Gerard - 12/04/2010 22:03
Ouwe rakker
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 ;)
cloudstrife - 12/04/2010 22:07
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
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
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
cloudstrife - 14/04/2010 09:35
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.
larssy1 - 14/04/2010 09:50
MySQL beginner
@roy..
Sessies zijn bedoelt om lang mee te gaan.
session_id() verandert dus niet =)
roy - 16/04/2010 22:01 (laatste wijziging 17/04/2010 21:40)
PHP gevorderde
OK, maar hoe haal je nu de waarden uit de sessie op de tweede pagina ?
Kan je misschien een voorbeeldje geven?
cloudstrife - 18/04/2010 13:10
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
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
roy - 20/04/2010 23:53 (laatste wijziging 21/04/2010 00:07)
PHP gevorderde
moet je session_start(); "bovenaan" in de code gebruiken?
Of wanneer je de sessie gaat vullen?
Het probleem wat ik namelijk heb, is dat mijn sessie nooit verloopt.. hoe zou dat kunnen?
Ik heb de volgende code:
<?php
echo $_SESSION['foo'];
echo "<br />";
if(!empty($_POST)){
echo "er is een post";
if(!isset($_SESSION['foo']))
{
$_SESSION['foo'] = "testFoo";
}
}
?>
<?php
if ( ! isset ( $_SESSION [ 'foo' ] ) ) {
$_SESSION [ 'foo' ] = "testFoo" ;
}
}
?>
Als ik een formulier POST dan wordt er een sessie gemaakt. Wanneer ik dan in de adresbalk op enter druk dan is de sessie weer leeg. Dit is niet hetgeen wat ik verwacht. Mijn veronderstelling is dat de sessie moet blijven bestaan...
Wie weet een oplossing? Wat moet ik anders doen ?
groeten,
Roy
cloudstrife - 21/04/2010 07:36
PHP beginner
Er voor zorgen dat je in de adresbalk niet op enter moet drukken. Ik zie niet direct een reden waarom je dit zou moeten doen..
Afhankelijk van systeem tot systeem bekijkt de server dit misschien als een nieuwe sessie (normaal gezien niet, maar het kan wel denk ik).
roy - 21/04/2010 12:18
PHP gevorderde
Een sessie blijft toch een periode actief op de gehele website ? dus ook tijdens het browsen op de website. Hoe kan het dan dat ik mijn sessie waarde kwijt raak?
larssy1 - 21/04/2010 12:52
MySQL beginner
Dan heb je waarschijnlijk niet in een goede sessies de waarde meegenomen.
zet je ook boven aan je script opnieuw session_start(); ??
dit moet voor elke pagina waar je de sessies gebruikt.
De sessie blijft bewaart totdat je de browser afsluit.
roy - 21/04/2010 12:55
PHP gevorderde
Ja dat heb ik gedaan.
Ik zie dat de sessie steeds leeg wordt als ik navigeer op de website. Ik gebruik overigens de session-class die in de eerste post staat beschreven ?
gnotrgnotr - 21/04/2010 16:29
Nieuw lid
session_destory();
roy - 21/04/2010 18:50
PHP gevorderde
en die gebruik ik juist nergens, dat is het gekke...
cloudstrife - 21/04/2010 19:13
PHP beginner
Je gebruikt die class van hierboven? Waar ga je daar dan een sessie variabele opvullen? Je schrijft enkel weg naar de database.
Ik vrees dat je echt alles door elkaar aan het mixen bent. Als je je sessies bewaard in een tabel is het niet de bedoeling dat je ze via $_SESSION[] kan gaan oproepen... Je moet telkens weer een query uitvoeren die de waarden ophaalt en ze ergens in een object of zo duwt en dan moet je dat object gebruiken om de waarden te gebruiken in de verdere logica op je pagina.
roy - 22/04/2010 20:30 (laatste wijziging 22/04/2010 20:31)
PHP gevorderde
Dat staat hier toch ;)
<?php
function adodb_sess_read($key) {
global $ADODB_SESS_CONN,$ADODB_SESS_INSERT;
$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;
}
?>
<?php
function adodb_sess_read( $key ) {
global $ADODB_SESS_CONN , $ADODB_SESS_INSERT ;
$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 ;
}
?>
roy - 23/04/2010 21:02 (laatste wijziging 24/04/2010 18:18)
PHP gevorderde
ADODB_SESS_CONN bevat de connectie string..
Weet iemand misschien een andere methode om sessies af te handelen met de database?
Of kan iemand me helpen???
EDIT:
Het lijkt erop dat de adodb_sess_read functie niet uitgevoerd wordt, weet iemand waarom ?
Gesponsorde links
Dit onderwerp is gesloten .