Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/matomo-org/matomo.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrobocoder <anthon.pang@gmail.com>2011-05-22 22:52:37 +0400
committerrobocoder <anthon.pang@gmail.com>2011-05-22 22:52:37 +0400
commitc09983bb5079461517d86f18a2dbe1bc8b9bceb7 (patch)
treedef7e77e77e8151baa95af3619ee044d49234722 /core/Session.php
parentd407ea95f7bca5b5577a6a3a491c9b83c9c7110d (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.php36
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'));
}
}
}