From 71dad1ff62b842578656f34a1aa33f00399309e2 Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Sat, 27 Jun 2009 06:20:24 -0700 Subject: use the session class to store sessions --- README | 10 ++++++++++ index.php | 46 +++++++++++++++++++++++++++++++++------------- lib/common.php | 2 ++ lib/util.php | 3 +++ 4 files changed, 48 insertions(+), 13 deletions(-) diff --git a/README b/README index 1a57d6a80..7f8748b3f 100644 --- a/README +++ b/README @@ -1278,6 +1278,16 @@ type: type of search. Ignored if PostgreSQL or Sphinx are enabled. Can either systems. We'll probably add another type sometime in the future, with our own indexing system (maybe like MediaWiki's). +sessions +-------- + +Session handling. + +handle: boolean. Whether we should register our own PHP session-handling + code (using the database and memcache if enabled). Defaults to false. + Setting this to true makes some sense on large or multi-server + sites, but it probably won't hurt for smaller ones, either. + Troubleshooting =============== diff --git a/index.php b/index.php index cb6a0fe60..f9b57e9d7 100644 --- a/index.php +++ b/index.php @@ -73,6 +73,38 @@ function handleError($error) exit(-1); } +function checkMirror($action_obj) +{ + global $config; + + static $alwaysRW = array('session', 'remember_me'); + + if (common_config('db', 'mirror') && $action_obj->isReadOnly($args)) { + if (is_array(common_config('db', 'mirror'))) { + // "load balancing", ha ha + $arr = common_config('db', 'mirror'); + $k = array_rand($arr); + $mirror = $arr[$k]; + } else { + $mirror = common_config('db', 'mirror'); + } + + // We ensure that these tables always are used + // on the master DB + + $config['db']['database_rw'] = $config['db']['database']; + $config['db']['ini_rw'] = INSTALLDIR.'/classes/laconica.ini'; + + foreach ($alwaysRW as $table) { + $config['db']['table_'.$table] = 'rw'; + } + + // everyone else uses the mirror + + $config['db']['database'] = $mirror; + } +} + function main() { // quick check for fancy URL auto-detection support in installer. @@ -146,19 +178,7 @@ function main() } else { $action_obj = new $action_class(); - // XXX: find somewhere for this little block to live - - if (common_config('db', 'mirror') && $action_obj->isReadOnly($args)) { - if (is_array(common_config('db', 'mirror'))) { - // "load balancing", ha ha - $arr = common_config('db', 'mirror'); - $k = array_rand($arr); - $mirror = $arr[$k]; - } else { - $mirror = common_config('db', 'mirror'); - } - $config['db']['database'] = $mirror; - } + checkMirror($action_obj); try { if ($action_obj->prepare($args)) { diff --git a/lib/common.php b/lib/common.php index bb1a4255d..3a5913f85 100644 --- a/lib/common.php +++ b/lib/common.php @@ -254,6 +254,8 @@ $config = 'oohembed' => array('endpoint' => 'http://oohembed.com/oohembed/'), 'search' => array('type' => 'fulltext'), + 'sessions' => + array('handle' => false), // whether to handle sessions ourselves ); $config['db'] = &PEAR::getStaticProperty('DB_DataObject','options'); diff --git a/lib/util.php b/lib/util.php index b3496a09e..2face6777 100644 --- a/lib/util.php +++ b/lib/util.php @@ -144,6 +144,9 @@ function common_ensure_session() $c = $_COOKIE[session_name()]; } if (!common_have_session()) { + if (common_config('sessions', 'handle')) { + Session::setSaveHandler(); + } @session_start(); if (!isset($_SESSION['started'])) { $_SESSION['started'] = time(); -- cgit v1.2.3-54-g00ecf