Overview

Packages

  • Auth
  • Config
  • Controller
  • Date
  • Db
  • Feed
    • Abstract
    • Writers
  • File
    • Decorator
  • Form
    • Element
  • Image
  • Log
    • Writer
  • Net
    • Exception
  • None
  • PHP
  • PHPMailer
  • Session
  • Util
  • Validate
    • Validator
  • Zend
    • Registry

Classes

  • Session_DbStorage
  • Session_Session
  • Overview
  • Package
  • Class
  • Tree
  1: <?php
  2: /**
  3:  * Pry Framework
  4:  *
  5:  * LICENSE
  6:  *
  7:  * This source file is subject to the new BSD license that is bundled
  8:  * with this package in the file LICENSE.txt.
  9:  * 
 10:  * @version $Revision: 276 $
 11:  */
 12: 
 13: /**
 14:  *  Wrapper de la gestion de session PHP.
 15:  * 
 16:  * Simplifie l'accès au variable de session via les methodes _get et _set
 17:  * @category Pry
 18:  * @package Session
 19:  * @version 1.0.7
 20:  * @author Olivier ROGER <oroger.fr>
 21:  */
 22: class Session_Session
 23: {
 24:     /**
 25:      * Nom de la session
 26:      *
 27:      * @var string
 28:      */
 29:     private $sessionName;
 30:     
 31:     /**
 32:      * Durée de la session en seconde
 33:      *
 34:      * @var float
 35:      */
 36:     private $sessionTTL;
 37: 
 38:     /**
 39:      * La session utilise t'elle un cookie ?
 40:      * @var boolean
 41:      */
 42:     private $useCookie;
 43:     
 44:     /**
 45:      * Force la regeneration de l'id automatiquement.
 46:      * 
 47:      * @var boolean 
 48:      */
 49:     private $regenerate;
 50:     
 51:     /**
 52:      * Instance du singleton
 53:      *
 54:      * @var Session_Session
 55:      */
 56:     static private $instance;
 57: 
 58:     /**
 59:      * Etat de la session
 60:      * @static
 61:      * @var boolean
 62:      */
 63:     static protected $started = false;
 64:     
 65:     /**
 66:      * Initialisation de la session (Singleton)
 67:      *
 68:      * @param string $name
 69:      * @param float $ttl
 70:      * @param boolean $regenerate Force la génération de l'id. A eviter en mode BDD
 71:      * @access private
 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:      * Récupère une instance de Session
105:      *
106:      * @static 
107:      * @param string $name
108:      * @param float $ttl
109:      * @return Session_Session
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:      * Retourne une variable de session
121:      * Null si la variable n'existe pas
122:      *
123:      * @param string $name
124:      * @return mixed
125:      */
126:     public function __get($name)
127:     {
128:         return array_key_exists($name, $_SESSION) ? $_SESSION[$name] : null;
129:     }
130:     
131:     /**
132:      * Surcharge de isset
133:      *
134:      * @param string $name
135:      * @return boolean
136:      */
137:     public function __isset($name)
138:     {
139:         return isset($_SESSION[$name]);
140:     }
141: 
142:     /**
143:      * Défini une variable de session
144:      *
145:      * @param string $name
146:      * @param mixed $value
147:      */
148:     public function __set($name,$value)
149:     {
150:         $_SESSION[$name] = $value;
151:     }
152:     
153:     /**
154:      * Regénère une id de session ainsi que le ttl
155:      *
156:      * @param boolean $delete_old
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:      * Vérifie la validité de la session
167:      * 
168:      * @return boolean
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:      * Suppression d'une valeur dans la session
186:      * @param string $key Clé de la valeur
187:      */
188:     public function remove($key)
189:     {
190:         if(isset($_SESSION[$key]))
191:             unset($_SESSION[$key]);
192:     }
193:     /**
194:      * Destruction de la session
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:  ?>
Pry Framework API documentation generated by ApiGen 2.6.1