+YUCHENG HU+ git-svn-id: https://svn.code.sf.net/p/hawebs/svn@423 a2543c7e-f6e9-4f8a-8bff-1ffc34733512
73 lines
1.9 KiB
PHP
73 lines
1.9 KiB
PHP
<?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: Session.php 2280 2010-06-06 19:27:36Z vipsoft $
|
|
*
|
|
* @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;
|
|
// for shared hosting, we assume the web server has been securely configured to prevent local session file hijacking
|
|
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_readable($sessionPath) || !@is_writable($sessionPath))
|
|
{
|
|
$sessionPath = PIWIK_USER_PATH . '/tmp/sessions';
|
|
$ok = true;
|
|
|
|
if(!is_dir($sessionPath))
|
|
{
|
|
@mkdir($sessionPath, 0755, true);
|
|
if(!is_dir($sessionPath))
|
|
{
|
|
// Unable to mkdir $sessionPath
|
|
$ok = false;
|
|
}
|
|
}
|
|
else if(!@is_writable($sessionPath))
|
|
{
|
|
// $sessionPath is not writable
|
|
$ok = false;
|
|
}
|
|
|
|
if($ok)
|
|
{
|
|
@ini_set('session.save_path', $sessionPath);
|
|
}
|
|
// else rely on default setting (assuming it is configured to a writeable folder)
|
|
}
|
|
}
|
|
|
|
Zend_Session::start();
|
|
}
|
|
}
|