Sessie in database

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

Mitchel V

Mitchel V

26/05/2010 09:19:14
Quote Anchor link
Hallo.

ik ben even aan het kijken hoe het zit.
ik volgde deze pagina:

sessie.php
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
<?php
class SessionManager {
   var
$life_time;
   function
SessionManager() {
      // Read the maxlifetime setting from PHP
      $this->life_time = get_cfg_var("session.gc_maxlifetime");
      // Register this object as the session handler
      session_set_save_handler(
        array( &$this, "open" ),
        array( &$this, "close" ),
        array( &$this, "read" ),
        array( &$this, "write"),
        array( &$this, "destroy"),
        array( &$this, "gc" )
      );
   }
}

function
open( $save_path, $session_name ) {
        global $sess_save_path;
        $sess_save_path = $save_path;
        // Don't need to do anything. Just return TRUE.
        return true;
     }

function
close() {
        return true;
}

function
read( $id ) {
           // Set empty result
           $data = '';
           // Fetch session data from the selected database
           $time = time();
           $newid = mysql_real_escape_string($id);
           $sql = "SELECT `session_data` FROM `sessions` WHERE `session_id` = '$newid' AND `expires` > $time";
           $rs = db_query($sql);                          
           $a = db_num_rows($rs);
           if($a > 0) {
             $row = db_fetch_assoc($rs);
             $data = $row['session_data'];
           }

                       return $data;
}

function
write( $id, $data ) {
         // Build query                
         $time = time() + $this->life_time;
         $newid = mysql_real_escape_string($id);
         $newdata = mysql_real_escape_string($data);
         $sql = "REPLACE `sessions` (`session_id`,`session_data`,`expires`) VALUES('$newid', '$newdata', $time)";
         $rs = db_query($sql);
         return TRUE;
}

function
destroy( $id ) {
         // Build query
         $newid = mysql_real_escape_string($id);
         $sql = "DELETE FROM `sessions` WHERE `session_id` = '$newid'";
         db_query($sql);
         return TRUE;
}

function
gc() {
         // Garbage Collection
         // Build DELETE query.  Delete all records who have passed the expiration time

         $sql = 'DELETE FROM `sessions` WHERE `expires` < UNIX_TIMESTAMP();';
         db_query($sql);
         // Always return TRUE
         return true;
}



?>


Maar hoe maak ik nu een nieuwe sessie aan?
en hoe delete ik weer een sessie?
en hoe update ik een sessie?

bedankt xD
Gewijzigd op 29/05/2010 15:43:15 door B a s
 
PHP hulp

PHP hulp

24/12/2024 06:30:53
 
Ivo K

Ivo K

26/05/2010 09:24:16
Quote Anchor link
Gewoon met de normale functies geloof ik. Dus session_start voor het openen etc.
 
Mitchel V

Mitchel V

26/05/2010 09:40:08
Quote Anchor link
dit werkt niet:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
require_once("sessie.php");
$sess = new SessionManager();
session_start();

session_set_save_handler(write);
$id = 1000;
$data = 'Test';
write( $id, $data );
 
Marien xD

Marien xD

26/05/2010 09:55:31
Quote Anchor link
Je hebt ook alle functies buiten de class gehaald. Alle functies moeten in de class.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
<?php
class SessionManager {
   var
$life_time;
   function
SessionManager() {
      // Read the maxlifetime setting from PHP
      $this->life_time = get_cfg_var("session.gc_maxlifetime");
      // Register this object as the session handler
      session_set_save_handler(  
        array( &$this, "open" ),  
        array( &$this, "close" ),
        array( &$this, "read" ),
        array( &$this, "write"),
        array( &$this, "destroy"),
        array( &$this, "gc" )
      );
   }

function
open( $save_path, $session_name ) {
        global $sess_save_path;
        $sess_save_path = $save_path;
        // Don't need to do anything. Just return TRUE.
        return true;
     }

function
close() {
        return true;
}

function
read( $id ) {
           // Set empty result
           $data = '';
           // Fetch session data from the selected database
           $time = time();
           $newid = mysql_real_escape_string($id);
           $sql = "SELECT `session_data` FROM `sessions` WHERE `session_id` = '$newid' AND `expires` > $time";
           $rs = db_query($sql);                            
           $a = db_num_rows($rs);
           if($a > 0) {
             $row = db_fetch_assoc($rs);
             $data = $row['session_data'];
           }

                       return $data;
}

function
write( $id, $data ) {
         // Build query                
         $time = time() + $this->life_time;
         $newid = mysql_real_escape_string($id);
         $newdata = mysql_real_escape_string($data);
         $sql = "REPLACE `sessions` (`session_id`,`session_data`,`expires`) VALUES('$newid', '$newdata', $time)";
         $rs = db_query($sql);
         return TRUE;
}

function
destroy( $id ) {
         // Build query
         $newid = mysql_real_escape_string($id);
         $sql = "DELETE FROM `sessions` WHERE `session_id` = '$newid'";
         db_query($sql);
         return TRUE;
}

function
gc() {
         // Garbage Collection
         // Build DELETE query.  Delete all records who have passed the expiration time

         $sql = 'DELETE FROM `sessions` WHERE `expires` < UNIX_TIMESTAMP();';
         db_query($sql);
         // Always return TRUE
         return true;
}
}
//deze accolade is verplaatst...


?>


En dan op de pagina's waar je het wil gaan gebruiken:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
require_once('sessie.php');
$sess = new SessionManager();
session_start();
?>


En dan kan je onbeperkt naar $_SESSION schrijven. Deze zal PHP dan automatisch in de database zetten :)
 
Mitchel V

Mitchel V

26/05/2010 10:00:23
Quote Anchor link
Maar hoe maak ik dan nu BV een nieuwe sessie aan als iemand ingelogd is?


BV:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
if($pass == $pass2){
// wat moet hier dan om de sessie aan te maken
}
?>
 
John Doe

John Doe

26/05/2010 11:43:47
Quote Anchor link
Ik zou pas beginnen met sessies aan te maken wanneer je inlogt dit lost dan gelijk het probleem op. Ik ken de rest van het idee niet dus het kan zijn dat dit niet mogelijk is.
 
Mitchel V

Mitchel V

26/05/2010 13:00:30
Quote Anchor link
ik moet gewoon weten hoe ik de sessie kan aanmaken voor de 3e x
 
Jelmer -

Jelmer -

26/05/2010 13:03:37
Quote Anchor link
Als je je eigen session_handler in PHP instelt, betekent dat dat PHP die functies gebruikt om intern de sessie te verwerken. Hoe jij sessies gebruikt blijft gewoon hetzelfde. Je moet alleen ervoor zorgen dat session_set_save_handler wordt aangeroepen voordat je session_start aanroept. Daarna kan je sessies gebruiken zoals PHP's eigen sessies. Zie de tutorials.
 
Mitchel V

Mitchel V

26/05/2010 13:04:59
Quote Anchor link
ok, maar moeten die sessies nog bepaalde namen hebben of kan ik dat zelf verzinnen?
 
Joren de Wit

Joren de Wit

26/05/2010 13:26:17
Quote Anchor link
Je kunt voor je sessievariabelen elke geldige naam gebruiken die je kunt verzinnen. Zoals Jelmer al zegt, door een eigen session handler te gebruiken verandert er alleen iets aan de afhandeling van de sessievariabelen, niet aan hoe je ze in je scripts gebruikt.
 
Mitchel V

Mitchel V

26/05/2010 13:43:43
Quote Anchor link
Ik probeer het even online te zetten maar ik krijg de volgende foutmelding:

Fatal error: Call to undefined function db_query() in ...................../sessie.php on line 36

wat doe ik verkeerd...?


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
<?php  
class SessionManager {  
   var
$life_time;  
   function
SessionManager() {  
      // Read the maxlifetime setting from PHP  
      $this->life_time = get_cfg_var("session.gc_maxlifetime");  
      // Register this object as the session handler  
      session_set_save_handler(  
        array( &$this, "open" ),  
        array( &$this, "close" ),  
        array( &$this, "read" ),  
        array( &$this, "write"),  
        array( &$this, "destroy"),  
        array( &$this, "gc" )  
      );  
   }  

function
open( $save_path, $session_name ) {  
        global $sess_save_path;  
        $sess_save_path = $save_path;  
        // Don't need to do anything. Just return TRUE.  
        return true;  
     }  

function
close() {  
        return true;  
}  

function
read( $id ) {  
           // Set empty result  
           $data = '';  
           // Fetch session data from the selected database  
           $time = time();  
           $newid = mysql_real_escape_string($id);  
           $sql = "SELECT `session_data` FROM `sessions` WHERE `session_id` = '$newid' AND `expires` > $time";  
           $rs = db_query($sql);                            
           $a = db_num_rows($rs);  
           if($a > 0) {  
             $row = db_fetch_assoc($rs);  
             $data = $row['session_data'];  
           }
  
                       return $data;  
}  

function
write( $id, $data ) {  
         // Build query                  
         $time = time() + $this->life_time;  
         $newid = mysql_real_escape_string($id);  
         $newdata = mysql_real_escape_string($data);  
         $sql = "REPLACE `sessions` (`session_id`,`session_data`,`expires`) VALUES('$newid', '$newdata', $time)";  
         $rs = db_query($sql);  
         return TRUE;  
}  

function
destroy( $id ) {  
         // Build query  
         $newid = mysql_real_escape_string($id);  
         $sql = "DELETE FROM `sessions` WHERE `session_id` = '$newid'";  
         db_query($sql);  
         return TRUE;  
}  

function
gc() {  
         // Garbage Collection  
         // Build DELETE query.  Delete all records who have passed the expiration time  

         $sql = 'DELETE FROM `sessions` WHERE `expires` < UNIX_TIMESTAMP();';  
         db_query($sql);  
         // Always return TRUE  
         return true;  
}  
}
//deze accolade is verplaatst...


?>
 
Jelmer -

Jelmer -

26/05/2010 13:51:24
Quote Anchor link
In je class roep je een functie db_query aan, maar die bestaat (op het moment van aanroepen) niet. Als die in een ander bestand staat, moet je ook dat bestand voor session_start() inladen.
 
Wolf Wolf

Wolf Wolf

26/05/2010 15:45:47
Quote Anchor link
In hoeverre is het gebruik van een eigen sessionhandler met db veiliger t.o.v. het gebruik van de standaard php-sessionhandler ?
Ik gebruik nu de standaard i.c.m. met een session-init bestand met zelfgedefinieerde session-variabelen erin. Ik denk er namelijk ook over om een eigen sessionhandler te gaan gebruiken (mijn session.auto_start is OFF).
 
Mitchel V

Mitchel V

26/05/2010 15:55:49
Quote Anchor link
Ik probeerde deze:

http://www.devshed.com/c/a/PHP/Storing-PHP-Sessions-in-a-Database/

ik heb het in de config.php gezet die op de index word geinclude waar ik de error krijg...
 
Chris -

Chris -

26/05/2010 15:58:45
Quote Anchor link
Mitchel:
Ik probeerde deze:

http://www.devshed.com/c/a/PHP/Storing-PHP-Sessions-in-a-Database/

ik heb het in de config.php gezet die op de index word geinclude waar ik de error krijg...


Quote:
2007-05-02

Houd er dus rekening mee dat het al weer 3 jaar oud is ;-)
 
Wolf Wolf

Wolf Wolf

26/05/2010 16:17:41
Quote Anchor link
Heb de tutorial op devshed.com vluchtig gelezen. Volgens mij volstaat de tutorial van Jurgen Meijer op phphulp toch ook ( en die is van 19-04-2008, maar dat zegt niet altijd wat ;-) )?

http://www.phphulp.nl/php/script/data-verwerking/mysql-sessionhandler/1327/mysqlsessionhandler/969/
 
Jelmer -

Jelmer -

26/05/2010 18:53:34
Quote Anchor link
Wolf:
In hoeverre is het gebruik van een eigen sessionhandler met db veiliger t.o.v. het gebruik van de standaard php-sessionhandler?

Vaak is het zo dat bij shared hosting de sessies van meerdere sites op dezelfde plek worden opgeslagen. Soms (alhoewel, ik denk stiekem dat het eerder vaak is) is het ook mogelijk om sessies van andere sites op dezelfde server te openen en te bewerken.

Als je shared hosting webserver goed is ingesteld, kan je ook veilig session_save_path veranderen naar een andere map waar alleen jouw gebruiker bij kan. Of je verplaatst je sessies naar de database, waar alleen jij het wachtwoord van weet.
 
Mitchel V

Mitchel V

26/05/2010 19:55:51
Quote Anchor link
Ik heb deze gevolgd;

http://www.phphulp.nl/php/script/data-verwerking/mysql-sessionhandler/1327/mysqlsessionhandler/969/

Maar hij doet het niet :S
er gebeurt volgens mij niet.
ik heb alles gekopieerd en geplakt en getest maar er gebeurt niets :S
 
Mitchel V

Mitchel V

27/05/2010 20:06:30
Quote Anchor link
Iemand die me kan helpen zo dat ik een werkende sessie handler heb?
Tot nu toe doet beide het niet :S
 
Jelmer -

Jelmer -

27/05/2010 21:51:30
Quote Anchor link
Ligt het probleem aan de sessionhandlers die je probeert, of bij de manier waarop je ze probeert te gebruiken. Heb je je script wel al werkend met PHP's standaard sessionhandler?
 
Mitchel V

Mitchel V

28/05/2010 09:17:15
Quote Anchor link
Het zal hoogstwaarschijnlijk aan mij liggen.
maar ik heb het volgende gedaan:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
require 'session.php';

echo 'Een sessie aanmaken: Userid';

$_SESSION['userid'] = 1;

session_write_close();


als ik nu in de database kijk staat er niets in.
Toen ik de eerste keer de pagina bezocht stond er wel iets omdat ik dit had:

$_SESSION['blaat'] = 'LOL';
$_SESSION['schaap'] = 1;

Maar als ik mijn eigen sessie er in zet doet hij het niet :S
Wat doe ik fout..?

Nu zet hij blaat en schaap ook niet meer in de database. :S
 

Pagina: 1 2 volgende »



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.