]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
use the session class to store sessions
authorEvan Prodromou <evan@controlyourself.ca>
Sat, 27 Jun 2009 13:20:24 +0000 (06:20 -0700)
committerEvan Prodromou <evan@controlyourself.ca>
Sat, 27 Jun 2009 13:20:24 +0000 (06:20 -0700)
README
index.php
lib/common.php
lib/util.php

diff --git a/README b/README
index 1a57d6a80e53d6ed09e78862f26e52893b0a8c04..7f8748b3fdea6fe1126b0908509851bdd77c034a 100644 (file)
--- 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
 ===============
 
index cb6a0fe6032677522b9cb42f1d360932f17f1fd5..f9b57e9d71d4c77dd8a7d7c9362a0117108de45f 100644 (file)
--- 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)) {
index bb1a4255da7fa9a5d7869f93eb7ee8e97d502812..3a5913f85caeda27549dce2529f7fecc8f06bf29 100644 (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');
index b3496a09e81ee6e9efa805eb208e1e6add40a5cd..2face677707172a3991b225e50e515969b6ca95b 100644 (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();