From c9b35cf6f0099545a688dc92a76988b7ddbf3b30 Mon Sep 17 00:00:00 2001 From: pzinovkin Date: Sun, 14 Mar 2010 16:12:52 +0000 Subject: [PATCH] Session, some fixes in PagerView and ErrorView #16 git-svn-id: svn+ssh://code.netmonsters.ru/svn/majestic/branches/evo@126 4cb57b5f-5bbd-dd11-951b-001d605cbbc5 --- app/ErrorAction.php | 11 +-- app/FrontController.php | 1 + app/PagerAction.php | 8 +- classes/Env.class.php | 23 ------ session/Session.php | 203 ++++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 213 insertions(+), 33 deletions(-) create mode 100644 session/Session.php diff --git a/app/ErrorAction.php b/app/ErrorAction.php index cf79500..1ab501d 100644 --- a/app/ErrorAction.php +++ b/app/ErrorAction.php @@ -29,11 +29,13 @@ class ErrorAction extends Action if ($this->exception instanceof Error404Exception) { $this->template = 404; } + $this->logError(); + $this->sendHTTPCode(); } protected function getTemplate() { - return '/static/' . $this->template; + return '/actions/' . $this->template; } protected function sendHttpCode() @@ -79,11 +81,4 @@ class ErrorAction extends Action error_log($message); } } - - public function fetch() - { - $this->logError(); - $this->sendHTTPCode(); - return $this->view->fetch($this->getTemplate()); - } } \ No newline at end of file diff --git a/app/FrontController.php b/app/FrontController.php index 1cc33e7..ada6599 100644 --- a/app/FrontController.php +++ b/app/FrontController.php @@ -32,6 +32,7 @@ class FrontController private function __construct() { ErrorHandler::init(); + Session::start(); if (DEBUG == true) { Profiler::getInstance()->start(); } diff --git a/app/PagerAction.php b/app/PagerAction.php index a632dc7..1dad1ec 100644 --- a/app/PagerAction.php +++ b/app/PagerAction.php @@ -26,8 +26,12 @@ class PagerAction extends Action protected function execute() { - $page = (int) Env::Get('p'); - $this->last_page = ceil($this->count/$this->limit); + $this->last_page = ceil($this->count / $this->limit); + if (Env::Get('p') == 'last') { + $page = $this->last_page; + } else { + $page = (int) Env::Get('p'); + } $this->page = ($page <= $this->last_page && $page > 0) ? $page : 1; $this->offset = $this->limit * ($this->page - 1); } diff --git a/classes/Env.class.php b/classes/Env.class.php index bca691d..109c2d1 100644 --- a/classes/Env.class.php +++ b/classes/Env.class.php @@ -64,28 +64,6 @@ class Env return (isset($_SERVER[$key])) ? $_SERVER[$key] : $default; } - static public function Session($var, $default = false) - { - return isset($_SESSION[$var]) ? $_SESSION[$var] : $default; - } - - static public function setSession($var, $value) - { - $_SESSION[$var] = $value; - } - - /** - * Unsets session var - * - * @param string $var - */ - static public function unsetSession($var) - { - if (isset($_SESSION[$var])) { - unset($_SESSION[$var]); - } - } - static public function setCookie($var, $value, $time = 0, $path = '/') { return setcookie($var, $value, $time, $path); @@ -120,5 +98,4 @@ class Env { self::$params = self::$params + $params; } - } \ No newline at end of file diff --git a/session/Session.php b/session/Session.php new file mode 100644 index 0000000..b658fd3 --- /dev/null +++ b/session/Session.php @@ -0,0 +1,203 @@ + + * @link http://netmonsters.ru + * @package Majestic + * @subpackage session + * @since 2010-03-14 + * @version SVN: $Id$ + * @filesource $URL$ + */ + +class Session +{ + /** + * Default number of seconds the session will be remembered + * for when asked to be remembered + * + * @var int + */ + private static $remember_time = 1209600; // 2 weeks + + private static $started = false; + + /** + * Avoid new + */ + private function __construct(){} + + /** + * Avoid cloning + */ + private function __clone(){} + + /** + * Retrieve a member of the $_SESSION + * + * If no $key is passed, returns the entire $_SESSION array. + * + * @param string $key + * @param mixed $default Default value to use if key not found + * @return mixed Returns null if key does not exist + */ + public static function get($key = null, $default = null) + { + if (null === $key) { + return $_SESSION; + } + return isset($_SESSION[$key]) ? $_SESSION[$key] : $default; + } + + /** + * Set $_SESSION values + * + * @param string|array $spec + * @param null|mixed $value + * @return void + */ + public static function set($spec, $value = null) + { + if (is_array($spec)) { + foreach ($spec as $key => $value) { + self::set($key, $value); + } + return; + } + $_SESSION[(string) $spec] = $value; + } + + /** + * Delete Session value + * + * @param string $key + */ + public static function del($key) + { + if (isset($_SESSION[$key])) { + unset($_SESSION[$key]); + } + } + + /** + * remember() - Write a persistent cookie that expires after a number + * of seconds in the future. If no number of seconds is specified, + * then this defaults to self::$rememberMeSeconds. + * + * @param $seconds integer - OPTIONAL specifies TTL for cookie in seconds from present time + * @return void + */ + public static function remember($seconds = null) + { + $seconds = (int) $seconds; + $seconds = ($seconds > 0) ? $seconds : self::$remember_time; + self::rememberUntil($seconds); + } + + /** + * forget() - Write a volatile session cookie, removing any persistent + * cookie that may have existed. The session would end upon, + * for example, termination of a web browser program. + * + * @return void + */ + public static function forget() + { + self::rememberUntil(); + } + + /** + * rememberUntil() - This method does the work of changing the state of the session + * cookie and making sure that it gets resent to the browser via regenerateId() + * + * @param int $seconds + * @return void + */ + public static function rememberUntil($seconds = 0) + { + $params = session_get_cookie_params(); + session_set_cookie_params( + $seconds, + $params['path'], + $params['domain'], + $params['secure'] + ); + self::regenerateId(); + } + + /** + * regenerateId() - Regenerate the session id. Best practice is to call this after + * session is started. If called prior to session starting, session id will be regenerated + * at start time. + * + * @throws Zend_Session_Exception + * @return void + */ + public static function regenerateId() + { + if (self::$started) { + session_regenerate_id(true); + } + } + + public static function isExists() + { + if (ini_get('session.use_cookies') == '1' && isset($COOKIE[session_name()])) { + return true; + } + return false; + } + + public static function start() + { + self::$started = true; + session_start(); + self::regenerateId(); + } + + /** + * getId() - get the current session id + * + * @return string + */ + public static function getId() + { + return session_id(); + } + + /** + * destroy() - This is used to destroy session data, and optionally, + * the session cookie itself + * + * @param bool $remove_cookie - OPTIONAL remove session id cookie, + * defaults to true (remove cookie) + * @return void + */ + public static function destroy($remove_cookie = true) + { + session_destroy(); + if ($remove_cookie) { + self::expireSessionCookie(); + } + } + + + /** + * expireSessionCookie() - Sends an expired session id cookie, causing the client to delete the session cookie + * + * @return void + */ + public static function expireSessionCookie() + { + if (isset($COOKIE[session_name()])) { + $params = session_get_cookie_params(); + setcookie( + session_name(), + false, + 0, + $params['path'], + $params['domain'], + $params['secure'] + ); + } + } +} \ No newline at end of file