diff options
-rw-r--r-- | core/Session.php | 64 | ||||
-rw-r--r-- | index.php | 38 |
2 files changed, 65 insertions, 37 deletions
diff --git a/core/Session.php b/core/Session.php new file mode 100644 index 0000000000..d4f11e9ef9 --- /dev/null +++ b/core/Session.php @@ -0,0 +1,64 @@ +<?php +/** + * Piwik - Open source web analytics + * + * @link http://piwik.org + * @license http://www.gnu.org/licenses/gpl-3.0.html Gpl v3 or later + * @version $Id$ + * + * @category Piwik + * @package Piwik + */ + +/** + * Session initialization. + * + * @package Piwik + */ +class Piwik_Session extends Zend_Session +{ + public static function start($options = false) + { + // don't use the default: PHPSESSID + $sessionName = defined('PIWIK_SESSION_NAME') ? PIWIK_SESSION_NAME : 'PIWIK_SESSID'; + @ini_set('session.name', $sessionName); + + // we consider this a misconfiguration (i.e., Piwik doesn't implement user-defined session handler functions) + if(ini_get('session.save_handler') == 'user') + { + @ini_set('session.save_handler', 'files'); + @ini_set('session.save_path', ''); + } + + // for "files", we want a writeable folder + if(ini_get('session.save_handler') == 'files') + { + $sessionPath = ini_get('session.save_path'); + if(preg_match('/^[0-9]+;(.*)/', $sessionPath, $matches)) + { + $sessionPath = $matches[1]; + } + if(ini_get('safe_mode') || ini_get('open_basedir') || empty($sessionPath) || !@is_writable($sessionPath)) + { + $sessionPath = PIWIK_USER_PATH . '/tmp/sessions'; + + if(!is_dir($sessionPath)) + { + @mkdir($sessionPath, 0755, true); + if(!is_dir($sessionPath)) + { + die("Error: Unable to mkdir $sessionPath"); + } + } + else if(!@is_writable($sessionPath)) + { + die("Error: $sessionPath is not writable"); + } + + @ini_set('session.save_path', $sessionPath); + } + } + + Zend_Session::start(); + } +} @@ -31,42 +31,6 @@ if(!defined('PIWIK_INCLUDE_PATH')) define('PIWIK_INCLUDE_PATH', PIWIK_DOCUMENT_ROOT); } -if(!defined('PIWIK_SESSION_NAME')) -{ - define('PIWIK_SESSION_NAME', 'PIWIK_SESSID'); -} -@ini_set('session.name', PIWIK_SESSION_NAME); -if(ini_get('session.save_handler') == 'user') -{ - @ini_set('session.save_handler', 'files'); - @ini_set('session.save_path', ''); -} -if(ini_get('session.save_handler') == 'files') -{ - $sessionPath = ini_get('session.save_path'); - if(preg_match('/^[0-9]+;(.*)/', $sessionPath, $matches)) - { - $sessionPath = $matches[1]; - } - if(ini_get('safe_mode') || ini_get('open_basedir') || empty($sessionPath) || !@is_writable($sessionPath)) - { - $sessionPath = PIWIK_USER_PATH . '/tmp/sessions'; - @ini_set('session.save_path', $sessionPath); - if(!is_dir($sessionPath)) - { - @mkdir($sessionPath, 0755, true); - if(!is_dir($sessionPath)) - { - die("Error: Unable to mkdir $sessionPath"); - } - } - else if(!@is_writable($sessionPath)) - { - die("Error: $sessionPath is not writable"); - } - } -} - require_once PIWIK_INCLUDE_PATH . '/core/testMinimumPhpVersion.php'; // NOTE: the code above this comment must be PHP4 compatible @@ -77,7 +41,7 @@ require_once PIWIK_INCLUDE_PATH .'/core/Loader.php'; if(!defined('PIWIK_ENABLE_SESSION_START') || PIWIK_ENABLE_SESSION_START) { - Zend_Session::start(); + Piwik_Session::start(); } if(!defined('PIWIK_ENABLE_ERROR_HANDLER') || PIWIK_ENABLE_ERROR_HANDLER) |