diff options
author | Evan Prodromou <evan@controlyourself.ca> | 2009-06-27 06:20:24 -0700 |
---|---|---|
committer | Evan Prodromou <evan@controlyourself.ca> | 2009-06-27 06:20:24 -0700 |
commit | 71dad1ff62b842578656f34a1aa33f00399309e2 (patch) | |
tree | fcc8ec6f0580d4f2d83b48e305f72f5ad80a464f | |
parent | 0ca22cf6e2bd80247520f7c1f83535f8de5fed0a (diff) |
use the session class to store sessions
-rw-r--r-- | README | 10 | ||||
-rw-r--r-- | index.php | 46 | ||||
-rw-r--r-- | lib/common.php | 2 | ||||
-rw-r--r-- | lib/util.php | 3 |
4 files changed, 48 insertions, 13 deletions
@@ -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 =============== @@ -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(); |