Session.class.php

Go to the documentation of this file.
00001 <?php
00002 /***************************************************************************
00003  *   Copyright (C) 2004-2007 by Konstantin V. Arkhipov                     *
00004  *                                                                         *
00005  *   This program is free software; you can redistribute it and/or modify  *
00006  *   it under the terms of the GNU Lesser General Public License as        *
00007  *   published by the Free Software Foundation; either version 3 of the    *
00008  *   License, or (at your option) any later version.                       *
00009  *                                                                         *
00010  ***************************************************************************/
00011 
00017     final class SessionNotStartedException extends BaseException
00018     {
00019         public function __construct()
00020         {
00021             return
00022                 parent::__construct(
00023                     'start session before assign or access session variables'
00024                 );
00025         }
00026     }
00027     
00033     final class Session extends StaticFactory
00034     {
00035         private static $isStarted = false;
00036         
00037         public static function start()
00038         {
00039             session_start();
00040             self::$isStarted = true;
00041         }
00042         
00046         /* void */ public static function destroy()
00047         {
00048             if (!self::$isStarted)
00049                 throw new SessionNotStartedException();
00050             
00051             self::$isStarted = false;
00052             
00053             try {
00054                 session_destroy();
00055             } catch (BaseException $e) {
00056                 // stfu
00057             }
00058             
00059             setcookie(session_name(), null, 0, '/');
00060         }
00061         
00062         public static function flush()
00063         {
00064             return session_unset();
00065         }
00066         
00070         /* void */ public static function assign($var, $val)
00071         {
00072             if (!self::isStarted())
00073                 throw new SessionNotStartedException();
00074             
00075             $_SESSION[$var] = $val;
00076         }
00077         
00082         public static function exist(/* ... */)
00083         {
00084             if (!self::isStarted())
00085                 throw new SessionNotStartedException();
00086             
00087             if (!func_num_args())
00088                 throw new WrongArgumentException('missing argument(s)');
00089             
00090             foreach (func_get_args() as $arg) {
00091                 if (!isset($_SESSION[$arg]))
00092                     return false;
00093             }
00094             
00095             return true;
00096         }
00097         
00101         public static function get($var)
00102         {
00103             if (!self::isStarted())
00104                 throw new SessionNotStartedException();
00105             
00106             return isset($_SESSION[$var]) ? $_SESSION[$var] : null;
00107         }
00108         
00109         public static function &getAll()
00110         {
00111             return $_SESSION;
00112         }
00113         
00118         /* void */ public static function drop(/* ... */)
00119         {
00120             if (!self::isStarted())
00121                 throw new SessionNotStartedException();
00122             
00123             if (!func_num_args())
00124                 throw new WrongArgumentException('missing argument(s)');
00125             
00126             foreach (func_get_args() as $arg)
00127                 unset($_SESSION[$arg]);
00128         }
00129         
00133         /* void */ public static function dropAll()
00134         {
00135             if (!self::isStarted())
00136                 throw new SessionNotStartedException();
00137             
00138             if ($_SESSION) {
00139                 foreach (array_keys($_SESSION) as $key) {
00140                     self::drop($key);
00141                 }
00142             }
00143         }
00144         
00145         public static function isStarted()
00146         {
00147             return self::$isStarted;
00148         }
00149         
00153         /* void */ public static function arrayAssign($scope, $array)
00154         {
00155             Assert::isArray($array);
00156             
00157             foreach ($array as $var) {
00158                 if (isset($scope[$var])) {
00159                     $_SESSION[$var] = $scope[$var];
00160                 }
00161             }
00162         }
00163         
00167         public static function getName()
00168         {
00169             if (!self::isStarted())
00170                 throw new SessionNotStartedException();
00171             
00172             return session_name();
00173         }
00174         
00178         public static function getId()
00179         {
00180             if (!self::isStarted())
00181                 throw new SessionNotStartedException();
00182             
00183             return session_id();
00184         }
00185     }
00186 ?>