Hoi allen,
ja ik weet dat ik afwijk van de standaard PHP globals en dat een aantal mensen dit "not done" vinden, maar het is een leuke test, en ik hou van OOP en out of the box denken
Als je scripts schrijft doe je meestal standaard een sessions_start().
Echter heb je niet altijd de $_SESSION nodig in je scripts.
Maar meestal gebruik je een framework/portal (index.php) om alles af te handelen.
Met onderstaand script vervang ik $_SESSION met een object.
Je hoeft dan helemaal niet meer session_start() aan te roepen, dit gebeurt gewoon automatisch op het moment dat je een sessie variabele wil uitlezen.
De hack zit hem wel in het feit dat session_write_close() niet meer werkt.
$_SESSION->write_close(); moet dus aangeroepen worden voor het juist functioneren.
Zou het wat zijn om PHP.net in te lichten als feature request?
ja ik weet dat ik afwijk van de standaard PHP globals en dat een aantal mensen dit "not done" vinden, maar het is een leuke test, en ik hou van OOP en out of the box denken
Als je scripts schrijft doe je meestal standaard een sessions_start().
Echter heb je niet altijd de $_SESSION nodig in je scripts.
Maar meestal gebruik je een framework/portal (index.php) om alles af te handelen.
Met onderstaand script vervang ik $_SESSION met een object.
Je hoeft dan helemaal niet meer session_start() aan te roepen, dit gebeurt gewoon automatisch op het moment dat je een sessie variabele wil uitlezen.
De hack zit hem wel in het feit dat session_write_close() niet meer werkt.
$_SESSION->write_close(); moet dus aangeroepen worden voor het juist functioneren.
Zou het wat zijn om PHP.net in te lichten als feature request?
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
| <?php /** * Hack to make $_SESSION a dynamic object */ error_reporting(E_ALL); ini_set('display_errors',1); if (!defined('PHP_SESSION_DISABLED')) { // PHP < 5.4 define('PHP_SESSION_DISABLED', 0); define('PHP_SESSION_NONE', 1); define('PHP_SESSION_ACTIVE', 2); } class Session extends \ArrayObject { public function start() { if (PHP_SESSION_NONE == self::status() && session_start()) { $this->exchangeArray($_SESSION); $_SESSION = $this; // Use this or session is empty register_shutdown_function(function(){ if (isset($_SESSION) && is_object($_SESSION)) { $_SESSION->write_close(); } }); } } public function status() { if (function_exists('session_status')) { return session_status(); } if ('cli' !== php_sapi_name()) { return session_id() ? PHP_SESSION_ACTIVE : PHP_SESSION_NONE; } return PHP_SESSION_DISABLED; } public function write_close() { if (PHP_SESSION_ACTIVE == self::status()) { $_SESSION = $this->getArrayCopy(); session_write_close(); $_SESSION = $this; } } # ArrayAccess public function offsetExists($key) { self::start(); return parent::offsetExists($key); } public function offsetGet($key) { self::start(); return parent::offsetGet($key); } public function offsetSet($key, $val) { self::start(); parent::offsetSet($key, $val); } public function offsetUnset($key) { self::start(); parent::offsetUnset($key); } } $_SESSION = new Session(isset($_SESSION) ? $_SESSION : array()); var_dump($_SESSION); $_SESSION['foo'] = 'bar'; |
Maak je niet druk, dat doet de compressor maar