Ik ben al een tijdje uit PHP geweest en het werken met normale sessies in een bestand op de server werkt zonder problemen. Maar ik wil de sessies in een database hebben. Daarvoor heb ik de onderstaande class van internet geplukt.
De sessie maak ik aan met:
Ik zie ook in de tabel die ik hiervoor heb aangemaakt dat de data erin kom als ik $_SESSION['user_name'] = "blaat"; doe.
Zodra ik echter naar een andere pagina ga, op wat voor manier dan ook, dan wordt het dataveld in de tabel geleegd zodra ik $session = new Session(); uitvoer. Doe ik dit niet, dan blijft de data in de tabel staan, maar krijg ik met echo $_SESSION["user_name"] niks terug. Tot zover heb ik met trial en error het probleem weten op te sporen, maar geen idee hoe ik dit kan oplossen. Op andere fora wordt aangegeven dat exact dezelfde code gewoon wel werkt.
Ik weet niet wat er fout gaat. Zover ik begrijp zou je met deze class sessies kunnen handlen zoals sessies normaal behandeld worden.
De sessie maak ik aan met:
PHP:
1
2
| require_once("sessions.php"); $session = new Session(); |
Ik zie ook in de tabel die ik hiervoor heb aangemaakt dat de data erin kom als ik $_SESSION['user_name'] = "blaat"; doe.
Zodra ik echter naar een andere pagina ga, op wat voor manier dan ook, dan wordt het dataveld in de tabel geleegd zodra ik $session = new Session(); uitvoer. Doe ik dit niet, dan blijft de data in de tabel staan, maar krijg ik met echo $_SESSION["user_name"] niks terug. Tot zover heb ik met trial en error het probleem weten op te sporen, maar geen idee hoe ik dit kan oplossen. Op andere fora wordt aangegeven dat exact dezelfde code gewoon wel werkt.
Ik weet niet wat er fout gaat. Zover ik begrijp zou je met deze class sessies kunnen handlen zoals sessies normaal behandeld worden.
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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
| <?php class Session { private $alive = true; private $dbc = NULL; function __construct() { session_set_save_handler( array(&$this, 'open'), array(&$this, 'close'), array(&$this, 'read'), array(&$this, 'write'), array(&$this, 'destroy'), array(&$this, 'clean')); session_start(); } function __destruct() { if($this->alive) { session_write_close(); $this->alive = false; } } function delete() { if(ini_get('session.use_cookies')) { $params = session_get_cookie_params(); setcookie(session_name(), '', time() - 42000, $params['path'], $params['domain'], $params['secure'], $params['httponly'] ); } session_destroy(); $this->alive = false; } private function open() { require('serverinfo.php'); $this->dbc = new MYSQLi($dbhost, $dbuser, $dbpass, $dbname) OR die('Could not connect to database.'); return true; } private function close() { return $this->dbc->close(); } private function read($sid) { $q = "SELECT `session_data` FROM `sessions` WHERE `session_id` = '".$this->dbc->real_escape_string($sid)."' LIMIT 1"; $r = $this->dbc->query($q); if($r->num_rows == 1) { $fields = $r->fetch_assoc(); return $fields['data']; } else { return ''; } } private function write($sid, $data) { $q = "REPLACE INTO `sessions` (`session_id`, `session_data`) VALUES ('".$this->dbc->real_escape_string($sid)."', '".$this->dbc->real_escape_string($data)."')"; $this->dbc->query($q); return $this->dbc->affected_rows; } private function destroy($sid) { $q = "DELETE FROM `sessions` WHERE `sessions_id` = '".$this->dbc->real_escape_string($sid)."'"; $this->dbc->query($q); $_SESSION = array(); return $this->dbc->affected_rows; } private function clean($expire) { $q = "DELETE FROM `sessions` WHERE DATE_ADD(`last_accessed`, INTERVAL ".(int) $expire." SECOND) < NOW()"; $this->dbc->query($q); return $this->dbc->affected_rows; } } ?> |
"I don't take life too seriously, no one gets out alive anyways..."