Sessie in database
ik ben even aan het kijken hoe het zit.
ik volgde deze pagina:
sessie.php
Code (php)
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
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;
}
?>
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
session_start voor het openen etc.
Gewoon met de normale functies geloof ik. Dus Code (php)
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
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...
?>
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:
En dan kan je onbeperkt naar $_SESSION schrijven. Deze zal PHP dan automatisch in de database zetten :)
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.
ik moet gewoon weten hoe ik de sessie kan aanmaken voor de 3e x
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.
ok, maar moeten die sessies nog bepaalde namen hebben of kan ik dat zelf verzinnen?
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.
Fatal error: Call to undefined function db_query() in ...................../sessie.php on line 36
wat doe ik verkeerd...?
Code (php)
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
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...
?>
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...
?>
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.
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).
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...
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...
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:
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.
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
Tot nu toe doet beide het niet :S
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?
maar ik heb het volgende gedaan:
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
require 'session.php';
echo 'Een sessie aanmaken: Userid';
$_SESSION['userid'] = 1;
session_write_close();
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