Kan er niet uit komen, ben pas net begonnen met gebruik van classes in elkaar etc.
Situatie: De sessies wil ik graag in de database hebben. Dit had ik al voor elkaar, maar wil ze nu in een class hebben zodat ik de database class ook kunnen gebruiken.
Vraag: Hoe kan ik een database class aanroepen voor andere zaken op de website én datzelfde object ook gebruiken in een class waarmee ik mijn sessies beheer (in MySQL db). Vervolgens lijkt het session_set_save_handler() ook niet helemaal goed te gaan.
Het werkt allemaal prima als het niet in een class zit, maar dan roep ik in de functies global $db aan voor de database verbinding. Dit is niet heel netjes natuurlijk en zelfs niet meer mogelijk in PHP 5.3.2 die nu op de servers draait.
Hieronder het eerste stukje, hier maak ik Db-verbinding & set session save handler
Hieronder de session class, helemaal gestript om het simpel te houden. Hier staat nog db::, van mijn laatste poging.
Ik zou het zeer waarderen als iemand mij uit kan leggen hoe ik dit nou simpel doe
Situatie: De sessies wil ik graag in de database hebben. Dit had ik al voor elkaar, maar wil ze nu in een class hebben zodat ik de database class ook kunnen gebruiken.
Vraag: Hoe kan ik een database class aanroepen voor andere zaken op de website én datzelfde object ook gebruiken in een class waarmee ik mijn sessies beheer (in MySQL db). Vervolgens lijkt het session_set_save_handler() ook niet helemaal goed te gaan.
Het werkt allemaal prima als het niet in een class zit, maar dan roep ik in de functies global $db aan voor de database verbinding. Dit is niet heel netjes natuurlijk en zelfs niet meer mogelijk in PHP 5.3.2 die nu op de servers draait.
Hieronder het eerste stukje, hier maak ik Db-verbinding & set session save handler
PHP:
1
2
3
4
5
6
7
8
9
10
11
| // Database verbinding maken $db = new db($config['db_host'], $config['db_user'], $config['db_password'], $config['db_database']); ini_set('session.save_handler', 'user'); session_set_save_handler(array('session', 'open'), array('session', 'close'), array('session', 'read'), array('session', 'write'), array('session', 'destroy'), array('session', 'gc')); |
Hieronder de session class, helemaal gestript om het simpel te houden. Hier staat nog db::, van mijn laatste poging.
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
| class session { function __construct() { } function open($path, $name) { return true; } function close() { return true; } function read($ses_id) { $result = db::query("SELECT `session_data` FROM `sessions` WHERE `session_id`='".db::real_escape_string($ses_id)."'"); if (!$result) return null; if (!db::num_rows($result)) return null; $row = db::fetch_assoc($result); return $row["session_data"]; } function write($ses_id, $data) { return (bool)db::query("REPLACE INTO sessions (`session_id`,`session_timestamp`,`session_data`) VALUES ('".db::real_escape_string($ses_id)."', ".time().", '".db::real_escape_string($data)."')"); } function destroy($ses_id) { return (bool)db::query("DELETE FROM `sessions` WHERE `session_id` = '".db::real_escape_string($ses_id)."'"); } function gc($life) { return (bool)db::query("DELETE FROM `sessions` WHERE `session_timestamp` < ".(time()-$life)); } function __destruct() { } } |
Ik zou het zeer waarderen als iemand mij uit kan leggen hoe ik dit nou simpel doe
[ Voor 4% gewijzigd door TheNephilim op 09-04-2010 12:25 ]