]> git.joonet.de Git - adminer.git/commitdiff
Improve concurrency
authorjakubvrana <jakubvrana@7c3ca157-0c34-0410-bff1-cbf682f78f5c>
Mon, 2 Nov 2009 22:09:23 +0000 (22:09 +0000)
committerjakubvrana <jakubvrana@7c3ca157-0c34-0410-bff1-cbf682f78f5c>
Mon, 2 Nov 2009 22:09:23 +0000 (22:09 +0000)
git-svn-id: https://adminer.svn.sourceforge.net/svnroot/adminer/trunk@1225 7c3ca157-0c34-0410-bff1-cbf682f78f5c

adminer/include/adminer.inc.php
adminer/include/bootstrap.inc.php
adminer/include/design.inc.php
adminer/include/editing.inc.php
adminer/include/functions.inc.php
adminer/include/mysql.inc.php
adminer/sql.inc.php
changes.txt

index 9d1bd9f6efcce24ce520201e1832d17d8e5a67e5..0306083a3de7dfc371df47006b3df1b29539e65a 100644 (file)
@@ -358,6 +358,7 @@ class Adminer {
        * @return string
        */
        function messageQuery($query) {
+               session_start();
                $id = "sql-" . count($_SESSION["messages"]);
                $_SESSION["history"][$_GET["server"]][DB][] = $query;
                return " <a href='#$id' onclick=\"return !toggle('$id');\">" . lang('SQL command') . "</a><div id='$id' class='hidden'><pre class='jush-sql'>" . shorten_utf8($query, 1000) . '</pre><a href="' . h(ME . 'sql=&history=' . (count($_SESSION["history"][$_GET["server"]][DB]) - 1)) . '">' . lang('Edit') . '</a></div>';
index 2b738dde6e90bbc9811d50840384c06572391c80..2e742f5660c34a6e70d5d4463040d8d5ff4d4e2e 100644 (file)
@@ -91,6 +91,11 @@ include "./include/connect.inc.php";
 include "./include/editing.inc.php";
 include "./include/export.inc.php";
 
+session_cache_limiter(""); // to allow restarting session
+if (@ini_set("session.use_cookies", false) !== false) { // @ - may be disabled
+       session_write_close(); // improves concurrency, may be restarted later
+}
+
 $confirm = " onclick=\"return confirm('" . lang('Are you sure?') . "');\"";
 $token = $_SESSION["tokens"][$_GET["server"]];
 $error = ($_POST
index a17bcf2af335aefd8a8acab5d536b8070291ffd6..4f8aa1ed3e696e413b889621a751c2aefc0dd3c0 100644 (file)
@@ -40,6 +40,7 @@ function page_header($title, $error = "", $breadcrumb = array(), $title2 = "") {
                echo "$title\n";
        }
        echo "<h2>$title_all</h2>\n";
+       restart_session();
        if ($_SESSION["messages"]) {
                echo "<div class='message'>" . implode("</div>\n<div class='message'>", $_SESSION["messages"]) . "</div>\n";
                $_SESSION["messages"] = array();
@@ -51,7 +52,7 @@ function page_header($title, $error = "", $breadcrumb = array(), $title2 = "") {
        if (strlen(DB) && $databases && !in_array(DB, $databases, true)) {
                $databases = null;
        }
-       if (isset($databases) && !isset($_GET["sql"])) {
+       if ((isset($databases) && !isset($_GET["sql"])) || !ini_get("session.use_cookies")) {
                // improves concurrency if a user opens several pages at once
                session_write_close();
        }
index dc12234ae4d362a55e368e0cb4eed417bc4b2be9..47c3d68504608c14967ae4765c95fa4cf3a5b8d2 100644 (file)
@@ -351,6 +351,7 @@ function drop_create($drop, $create, $location, $message_drop, $message_alter, $
        $dropped = strlen($name) && ($_POST["dropped"] || queries($drop));
        $created = queries($create);
        if (!queries_redirect($location, (strlen($name) ? $message_alter : $message_create), $created) && $dropped) {
+               session_start();
                $_SESSION["messages"][] = $message_drop;
        }
        return $dropped;
index 8a6b440299a4158e9912f43d1a5ac4b64ad58933..590d0f146b40f5a55956bccc2dd42dc003f63f0b 100644 (file)
@@ -204,6 +204,15 @@ function cookie($name, $value) {
        return setcookie($name, $value, time() + 2592000, preg_replace('~\\?.*~', '', $_SERVER["REQUEST_URI"])); // 2592000 = 30 * 24 * 60 * 60
 }
 
+/** Restart stopped session
+* @return null
+*/
+function restart_session() {
+       if (!ini_get("session.use_cookies")) {
+               session_start();
+       }
+}
+
 /** Send Location header and exit
 * @param string
 * @param string
@@ -211,6 +220,7 @@ function cookie($name, $value) {
 */
 function redirect($location, $message = null) {
        if (isset($message)) {
+               session_start();
                $_SESSION["messages"][] = $message;
        }
        header("Location: " . (strlen($location) ? $location : "."));
@@ -228,13 +238,13 @@ function redirect($location, $message = null) {
 */
 function query_redirect($query, $location, $message, $redirect = true, $execute = true, $failed = false) {
        global $connection, $error, $adminer;
+       if ($execute) {
+               $failed = !$connection->query($query);
+       }
        $sql = "";
        if ($query) {
                $sql = $adminer->messageQuery($query);
        }
-       if ($execute) {
-               $failed = !$connection->query($query);
-       }
        if ($failed) {
                $error = h($connection->error) . $sql;
                return false;
index 9fc827e713ae5a0a5e853d30845d9d852803f9f9..5ec6c87aaffc1e97ae8837a95e4c0d1a09ad67d4 100644 (file)
@@ -168,6 +168,7 @@ function get_databases($flush = true) {
        // SHOW DATABASES can take a very long time so it is cached
        $return = &$_SESSION["databases"][$_GET["server"]];
        if (!isset($return)) {
+               restart_session();
                $return = get_vals("SHOW DATABASES");
                if ($flush) {
                        ob_flush();
index c58ee7f1428ee4e0251e232d6f031fd71a7d9f8e..e047c4fc5025c9932b220a19617ea688eeeb437a 100644 (file)
@@ -27,8 +27,8 @@ if (!$error && $_POST) {
                $space = "(\\s|/\\*.*\\*/|(#|-- )[^\n]*\n|--\n)";
                $alter_database = "(CREATE|DROP)$space+(DATABASE|SCHEMA)\\b~isU";
                $databases = &$_SESSION["databases"][$_GET["server"]];
-               if (isset($databases) && !preg_match("~\\b$alter_database", $query)) { // quick check - may be inside string
-                       //! false positive with $fp
+               if ((isset($databases) && !preg_match("~\\b$alter_database", $query)) || !ini_get("session.use_cookies")) { // quick check - may be inside string
+                       //! false positive with $fp and disabled ini_set() and enabled session.use_cookies
                        session_write_close();
                }
                $delimiter = ";";
index f06694613b8e0cbaabbf649daa6fa4650bc4af5f..f4554249dfa0c67ec1248c4a37c14ad9f54e7e9e 100644 (file)
@@ -1,4 +1,5 @@
 Adminer 2.2.1-dev:
+Improve concurrency
 Link new item in backward keys (Editor)
 
 Adminer 2.2.0 (released 2009-10-20):