1: <?php
2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
12:
13: 14: 15: 16: 17: 18: 19: 20: 21:
22: class Session_Session
23: {
24: 25: 26: 27: 28:
29: private $sessionName;
30:
31: 32: 33: 34: 35:
36: private $sessionTTL;
37:
38: 39: 40: 41:
42: private $useCookie;
43:
44: 45: 46: 47: 48:
49: private $regenerate;
50:
51: 52: 53: 54: 55:
56: static private $instance;
57:
58: 59: 60: 61: 62:
63: static protected $started = false;
64:
65: 66: 67: 68: 69: 70: 71: 72:
73: private function __construct($name='PrySess',$ttl=null,$regenerate = true)
74: {
75: if(isset($_SESSION))
76: throw new Exception('Une session existe déjà');
77:
78: $this->sessionName = $name;
79: $this->sessionTTL = $ttl;
80: $this->useCookie = (boolean) ini_get('session.use_cookies');
81: $this->autoRegenerate = $regenerate;
82:
83: session_name($this->sessionName);
84:
85: if(!self::$started) {
86: session_start();
87: if($this->regenerate) {
88: session_regenerate_id();
89: var_dump('regenerate');
90: }
91: self::$started = true;
92: }
93:
94: if(self::$started) {
95: if(!is_null($this->sessionTTL))
96: if(empty($_SESSION['ttl']))
97: $_SESSION['ttl'] = time()+$this->sessionTTL;
98: else
99: $_SESSION['ttl'] = -1;
100: }
101: }
102:
103: 104: 105: 106: 107: 108: 109: 110:
111: public static function getInstance($name='PrySess',$ttl=null)
112: {
113: if(!isset(self::$instance))
114: self::$instance = new Session_Session($name,$ttl);
115:
116: return self::$instance;
117: }
118:
119: 120: 121: 122: 123: 124: 125:
126: public function __get($name)
127: {
128: return array_key_exists($name, $_SESSION) ? $_SESSION[$name] : null;
129: }
130:
131: 132: 133: 134: 135: 136:
137: public function __isset($name)
138: {
139: return isset($_SESSION[$name]);
140: }
141:
142: 143: 144: 145: 146: 147:
148: public function __set($name,$value)
149: {
150: $_SESSION[$name] = $value;
151: }
152:
153: 154: 155: 156: 157:
158: public function refresh($delete_old = true)
159: {
160: session_regenerate_id($delete_old);
161: if(!is_null($this->sessionTTL))
162: $_SESSION['ttl'] = time()+$this->sessionTTL;
163: }
164:
165: 166: 167: 168: 169:
170: public function check()
171: {
172: $now = time();
173: if(is_null($this->sessionTTL) || $this->sessionTTL == -1)
174: return true;
175: elseif($_SESSION['ttl'] - $now >0) {
176: $this->refresh();
177: return true;
178: } else {
179: $this->destroy();
180: return false;
181: }
182: }
183:
184: 185: 186: 187:
188: public function remove($key)
189: {
190: if(isset($_SESSION[$key]))
191: unset($_SESSION[$key]);
192: }
193: 194: 195: 196:
197: public function destroy()
198: {
199: if(isset($_SESSION)) {
200: @session_unset();
201: @session_destroy();
202: }
203:
204: if($this->useCookie) {
205: $cookie = session_get_cookie_params();
206: $cookie['httponly'] = isset($cookie['httponly']) ? $cookie['httponly'] : false;
207: setcookie($this->sessionName, '', time() - 42000, $cookie['path'], $cookie['domain'], $cookie['domain'], $cookie['httponly']);
208: }
209: }
210: }
211: ?>