diff options
author | robocoder <anthon.pang@gmail.com> | 2011-05-22 22:52:37 +0400 |
---|---|---|
committer | robocoder <anthon.pang@gmail.com> | 2011-05-22 22:52:37 +0400 |
commit | c09983bb5079461517d86f18a2dbe1bc8b9bceb7 (patch) | |
tree | def7e77e77e8151baa95af3619ee044d49234722 /core/Session.php | |
parent | d407ea95f7bca5b5577a6a3a491c9b83c9c7110d (diff) |
fixes #1279
git-svn-id: http://dev.piwik.org/svn/trunk@4765 59fd770c-687e-43c8-a1e3-f5a4ff64c105
Diffstat (limited to 'core/Session.php')
-rw-r--r-- | core/Session.php | 36 |
1 files changed, 16 insertions, 20 deletions
diff --git a/core/Session.php b/core/Session.php index 686a22d285..18b46f4cec 100644 --- a/core/Session.php +++ b/core/Session.php @@ -49,14 +49,22 @@ class Piwik_Session extends Zend_Session @ini_set('session.referer_check', ''); // we consider these to be misconfigurations, in that - // - user - Piwik doesn't implement user-defined session handler functions - // - mm - is not recommended, not supported, not available for Windows, and has a potential concurrency issue + // - user - we can't verify that user-defined session handler functions have been set via session_set_save_handler() + // - mm - this handler is not recommended, unsupported, not available for Windows, and has a potential concurrency issue + // - files - this handler doesn't work well in load-balance environments and may have a concurrency issue with locked session files $currentSaveHandler = ini_get('session.save_handler'); - if($currentSaveHandler == 'user' - || $currentSaveHandler == 'mm') + if(in_array($currentSaveHandler, array('user', 'mm', 'files'))) { - @ini_set('session.save_handler', 'files'); - @ini_set('session.save_path', ''); + $db = Zend_Registry::get('db'); + $config = array( + 'name' => Piwik_Common::prefixTable('session'), + 'primary' => 'id', + 'modifiedColumn' => 'modified', + 'dataColumn' => 'data', + 'lifetimeColumn' => 'lifetime', + 'db' => Zend_Registry::get('db'), + ); + self::setSaveHandler( new Zend_Session_SaveHandler_DbTable($config)); } // garbage collection may disabled by default (e.g., Debian) @@ -65,23 +73,11 @@ class Piwik_Session extends Zend_Session @ini_set('session.gc_probability', 1); } - // for "files", use our own folder to prevent local session file hijacking - if(ini_get('session.save_handler') == 'files') - { - $sessionPath = PIWIK_USER_PATH . '/tmp/sessions'; - @ini_set('session.save_path', $sessionPath); - - if(!is_dir($sessionPath)) - { - Piwik_Common::mkdir($sessionPath); - } - } - try { Zend_Session::start(); } catch(Exception $e) { - // This message is not translateable because translations haven't been loaded yet. - Piwik_ExitWithMessage('Unable to start session. Check that session.save_path or tmp/sessions is writeable, and session.auto_start = 0.'); + Piwik::log('Unable to start session: ' . $e->getMessage()); + Piwik_ExitWithMessage(Piwik_Translate('General_ExceptionUnableToStartSession')); } } } |