use the session class to store sessions

This commit is contained in:
Evan Prodromou 2009-06-27 06:20:24 -07:00
parent 0ca22cf6e2
commit 71dad1ff62
4 changed files with 48 additions and 13 deletions

10
README
View File

@ -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
===============

View File

@ -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)) {

View File

@ -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');

View File

@ -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();