Fixed session handling bug resulting in blank page on some pre-5.2 php versions.
[fa-stable.git] / includes / session.inc
index 9eb70019807a98852d6cb28a5aa76cc687d331fc..0089095be1fd341a3b9dc02f19e4b0cc3944ed0e 100644 (file)
@@ -21,7 +21,11 @@ class SessionManager
                $https = isset($secure) ? $secure : (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off');
 
                // Set session cookie options
-               session_set_cookie_params($limit, $path, $domain, $https, true);
+               if (version_compare(PHP_VERSION, '5.2', '<')) // avoid failure on older php versions
+                       session_set_cookie_params($limit, $path, $domain, $https);
+               else
+                       session_set_cookie_params($limit, $path, $domain, $https, true);
+
                session_start();
 
                // Make sure the session hasn't expired, and destroy it if it has
@@ -184,7 +188,7 @@ function write_login_filelog($login, $result)
        $msg .= "*/\n";
        $msg .= "\$login_faillog = " .var_export($login_faillog, true). ";\n";
 
-       $filename = $path_to_root."/faillog.php";
+       $filename = $path_to_root."/tmp/faillog.php";
 
        if ((!file_exists($filename) && is_writable($path_to_root)) || is_writable($filename))
        {
@@ -354,7 +358,6 @@ foreach ($installed_extensions as $ext)
 // ini_set('session.save_path', dirname(__FILE__).'/../tmp/');
 
 ini_set('session.gc_maxlifetime', 36000); // 10hrs
-ini_set('session.cache_limiter', 'private'); // prevent 'page expired' errors
 
 $Session_manager = new SessionManager();
 $Session_manager->sessionStart('FA'.md5(dirname(__FILE__)));
@@ -366,7 +369,7 @@ include_once($path_to_root . "/config.php");
 get_text_init();
 
 if ($login_delay > 0)
-       @include_once($path_to_root . "/faillog.php");
+       @include_once($path_to_root . "/tmp/faillog.php");
 
 // Page Initialisation
 if (!isset($_SESSION['language']) || !method_exists($_SESSION['language'], 'set_language')) 
@@ -452,6 +455,14 @@ if (strstr($_SERVER['PHP_SELF'], 'logout.php') == false){
                        // Incorrect password
                                login_fail();
                        }
+                       elseif(isset($_SESSION['timeout']) && !$_SESSION['timeout']['post'])
+                       {
+                               // in case of GET request redirect to avoid confirmation dialog 
+                               // after return from menu option
+                               header("HTTP/1.1 303 See Other");
+                               header("Location: ".$_SESSION['timeout']['uri']);
+                               exit();
+                       }
                        $lang = &$_SESSION['language'];
                        $lang->set_language($_SESSION['language']->code);
                }