login  Naam:   Wachtwoord: 
Registreer je!
 Forum

sessies in een database

Offline roy - 12/04/2010 21:47 (laatste wijziging 24/04/2010 18:18)
Avatar van royPHP gevorderde Hoi,

Ik bewaar de sessies in de database, IPV in een bestand op de server.

ik gebruik de volgende code:
  1. <?php
  2. class session {
  3. var $conn;
  4.  
  5.  
  6. function session($conn) {
  7. $this->conn = $conn;
  8. }
  9.  
  10. function adodb_sess_open($save_path, $session_name) {
  11.  
  12.  
  13. return true;
  14. }
  15.  
  16. function adodb_sess_close() {
  17. global $ADODB_SESS_CONN;
  18.  
  19. if ($ADODB_SESS_CONN)
  20. $ADODB_SESS_CONN->Close();
  21. return true;
  22. }
  23.  
  24. function adodb_sess_read($key) {
  25. global $ADODB_SESS_CONN,$ADODB_SESS_INSERT;
  26.  
  27. echo $rs = $this->conn->Execute("SELECT data FROM sessions WHERE sesskey = '$key' AND expiry >= ".time());
  28. if ($rs) {
  29. $v = $rs->fields[0];
  30. if ($rs->EOF)
  31. $ADODB_SESS_INSERT = true;
  32. $rs->Close();
  33. return ($v) ? $v : '';
  34. }
  35. $ADODB_SESS_INSERT = true;
  36. return false;
  37. }
  38.  
  39. function adodb_sess_write($key, $val) {
  40. global $ADODB_SESS_INSERT,$ADODB_SESS_CONN,$ADODB_SESS_LIFE;
  41.  
  42. //$expiry = time() + get_cfg_var("session.gc_maxlifetime");
  43. $expiry = time() + 5;
  44. echo $expiry;
  45. $qry = "UPDATE sessions SET expiry=$expiry,data=".$this->conn->qstr($val, get_magic_quotes_runtime())." WHERE sesskey='$key'";
  46. echo $qry;
  47. $rs = $this->conn->Execute($qry);
  48.  
  49. if ($rs)
  50. $rs->Close();
  51. if ($ADODB_SESS_INSERT || $rs === false) {
  52. echo $qry = "INSERT INTO sessions VALUES ('$key',$expiry,".$this->conn->qstr($val, get_magic_quotes_runtime()).")";
  53. $rs = $this->conn->Execute($qry);
  54. if ($rs)
  55. $rs->Close();
  56. }
  57.  
  58. return isset($rs);
  59. }
  60.  
  61. function adodb_sess_destroy($key) {
  62. global $ADODB_SESS_CONN;
  63.  
  64. $qry = "DELETE FROM sessions WHERE sesskey = '$key'";
  65. $rs = $this->conn->Execute($qry);
  66. if ($rs)
  67. $rs->Close();
  68. return $rs;
  69. }
  70.  
  71. function adodb_sess_gc($maxlifetime) {
  72. global $ADODB_SESS_CONN;
  73.  
  74. $qry = "DELETE FROM sessions WHERE expiry < ".time();
  75. $rs = $this->conn->Execute($qry);
  76. if ($rs)
  77. $rs->Close();
  78. return true;
  79. }
  80.  
  81.  
  82. }
  83.  
  84.  
  85.  
  86. ?>


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
Offline Gerard - 12/04/2010 22:03
Avatar van Gerard 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 ;)
Offline cloudstrife - 12/04/2010 22:07
Avatar van cloudstrife 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.
Offline Raze - 13/04/2010 16:18
Avatar van Raze PHP beginner idd, sessies blijven zelf nodig, of gegevens opslaan via een cookie, maar cookies zijn manipuleerbaar, wat het al een stuk onveiliger maakt.
Offline roy - 13/04/2010 22:02
Avatar van roy 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 cloudstrife - 14/04/2010 09:35
Avatar van cloudstrife 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 larssy1 - 14/04/2010 09:50
Avatar van larssy1 MySQL beginner @roy..
Sessies zijn bedoelt om lang mee te gaan.
session_id() verandert dus niet =)

Offline Joost - 14/04/2010 16:58
Avatar van Joost PHP expert http://nl.php.n...andler.php

Ik denk dat je met die uitleg er wel moet komen!
Offline roy - 16/04/2010 22:01 (laatste wijziging 17/04/2010 21:40)
Avatar van roy PHP gevorderde OK, maar hoe haal je nu de waarden uit de sessie op de tweede pagina ?
Kan je misschien een voorbeeldje geven?
Offline cloudstrife - 18/04/2010 13:10
Avatar van cloudstrife 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.
Offline roy - 18/04/2010 16:09
Avatar van roy PHP gevorderde ok,

  1. <?PHP
  2. function sess_read($sess_id) {
  3. global $dbc;
  4. print "Session read.\n";
  5. $sQuery = "SELECT data FROM sessions WHERE id='".mysql_real_escape_string($sess_id)."'";
  6. $rs = $this->conn->GetAll($sQuery);
  7. if (count($rs) == 1) {
  8. list($data) = $rs;
  9. return $data;
  10. } else {
  11. return '';
  12. }
  13.  
  14. }
  15. ?>

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
Offline Raze - 18/04/2010 21:26
Avatar van Raze PHP beginner In een boek van Larry Ullman ben ik dit ooit tegengekomen
"PHP 5 voor het worldwide web".

http://www.phphulp.nl/php/boeken/35/


Offline roy - 20/04/2010 23:53 (laatste wijziging 21/04/2010 00:07)
Avatar van roy 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:
  1. <?php
  2. echo $_SESSION['foo'];
  3. echo "<br />";
  4. if(!empty($_POST)){
  5. echo "er is een post";
  6. if(!isset($_SESSION['foo']))
  7. {
  8. $_SESSION['foo'] = "testFoo";
  9. }
  10. }
  11. ?>


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
Offline cloudstrife - 21/04/2010 07:36
Avatar van cloudstrife 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).
Offline roy - 21/04/2010 12:18
Avatar van roy 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?
Offline larssy1 - 21/04/2010 12:52
Avatar van larssy1 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.
Offline roy - 21/04/2010 12:55
Avatar van roy 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 ?
Offline gnotrgnotr - 21/04/2010 16:29
Avatar van gnotrgnotr Nieuw lid session_destory();
Offline roy - 21/04/2010 18:50
Avatar van roy PHP gevorderde en die gebruik ik juist nergens, dat is het gekke...
Offline cloudstrife - 21/04/2010 19:13
Avatar van cloudstrife 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.
Offline roy - 22/04/2010 20:30 (laatste wijziging 22/04/2010 20:31)
Avatar van roy PHP gevorderde Dat staat hier toch ;)

  1. <?php
  2. function adodb_sess_read($key) {
  3. global $ADODB_SESS_CONN,$ADODB_SESS_INSERT;
  4.  
  5. $rs = $this->conn->Execute("SELECT data FROM sessions WHERE sesskey = '$key' AND expiry >= ".time());
  6. if ($rs) {
  7. $v = $rs->fields[0];
  8. if ($rs->EOF)
  9. $ADODB_SESS_INSERT = true;
  10. $rs->Close();
  11. return ($v) ? $v : '';
  12. }
  13. $ADODB_SESS_INSERT = true;
  14. return false;
  15. }
  16. ?>
Offline cloudstrife - 23/04/2010 07:28
Avatar van cloudstrife PHP beginner Nu staat het hier, daarvoor niet eh maat 

Nu ja wat die ADODB_SESS_CONN en INSERT juist doen weet ik ook niet. Ik zou het anders doen door een class te maken met daarin de gegevens die je wil bijhouden en die opvullen vanuit je query en dan dat object in je $_SESSION duwen zodat je overal aan de data aankan.
Offline roy - 23/04/2010 21:02 (laatste wijziging 24/04/2010 18:18)
Avatar van roy 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 ?
Offline Joost - 25/04/2010 20:32
Avatar van Joost PHP expert http://www.devs...a-Database/

Deze tutorial geeft een goede uitleg erover.  
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.211s