[FEATURE] Session tables: add key for ses_timestamp and simplify timeout-check
authorOliver Hader <olly@typo3.org>
Thu, 14 Jul 2011 22:50:41 +0000 (00:50 +0200)
committerChristian Kuhn <lolli@schwarzbu.ch>
Sun, 31 Jul 2011 10:17:53 +0000 (12:17 +0200)
* add a key for ses_timestamp (in SQL) to speedup searches
  for sessions within timeout-limit
* simplify the overly-complex timeout-check

Change-Id: I171a63a0a7ec8cdd17c59d34411b41483d672b0f
Resolves: #20877
Reviewed-on: http://review.typo3.org/3341
Reviewed-by: Susanne Moog
Tested-by: Susanne Moog
Reviewed-by: Christian Kuhn
Tested-by: Christian Kuhn
t3lib/stddb/tables.sql
typo3/sysext/beuser/mod/index.php
typo3/sysext/cms/ext_tables.sql

index 6833337..4ef10f5 100644 (file)
@@ -46,7 +46,8 @@ CREATE TABLE be_sessions (
   ses_tstamp int(11) unsigned DEFAULT '0' NOT NULL,
   ses_data longtext,
   ses_backuserid int(11) NOT NULL default '0',
-  PRIMARY KEY (ses_id,ses_name)
+  PRIMARY KEY (ses_id,ses_name),
+  KEY ses_tstamp (ses_tstamp)
 );
 
 #
@@ -342,4 +343,4 @@ CREATE TABLE sys_language (
   static_lang_isocode int(11) unsigned DEFAULT '0' NOT NULL,
   PRIMARY KEY (uid),
   KEY parent (pid)
-);
\ No newline at end of file
+);
index 715d838..280a8fd 100755 (executable)
@@ -1530,14 +1530,11 @@ class SC_mod_tools_be_user_index {
                $where_clause = '';
                $orderBy = 'u.username';
 
-               if (t3lib_utility_Math::canBeInterpretedAsInteger($GLOBALS['TYPO3_CONF_VARS']['BE']['sessionTimeout'])) {
-                       $where_clause .= 'ses_tstamp+' . $GLOBALS['TYPO3_CONF_VARS']['BE']['sessionTimeout'] . ' > ' . $GLOBALS['EXEC_TIME'];
-               } else {
-                       $timeout = intval($GLOBALS['TYPO3_CONF_VARS']['BE']['sessionTimeout']);
-                       if ($timeout > 0)       {
-                               $where_clause .= 'ses_tstamp+' . $timeout . ' > ' . $GLOBALS['EXEC_TIME'];
-                       }
+               $timeout = intval($GLOBALS['TYPO3_CONF_VARS']['BE']['sessionTimeout']);
+               if ($timeout > 0) {
+                       $where_clause = 'ses_tstamp > ' . ($GLOBALS['EXEC_TIME'] - $timeout);
                }
+
                        // Fetch active sessions of other users from storage:
                $sessions = $GLOBALS['TYPO3_DB']->exec_SELECTgetRows($select_fields,$from_table,$where_clause,'',$orderBy);
                        // Process and visualized each active session as a table row:
index ff64878..eff712d 100755 (executable)
@@ -97,7 +97,8 @@ CREATE TABLE fe_sessions (
   ses_tstamp int(11) unsigned DEFAULT '0' NOT NULL,
   ses_data blob,
   ses_permanent tinyint(1) unsigned DEFAULT '0' NOT NULL,
-  PRIMARY KEY (ses_id,ses_name)
+  PRIMARY KEY (ses_id,ses_name),
+  KEY ses_tstamp (ses_tstamp)
 ) ENGINE=InnoDB;
 
 
@@ -377,4 +378,4 @@ CREATE TABLE backend_layout (
   PRIMARY KEY (uid),
   KEY parent (pid),
   KEY t3ver_oid (t3ver_oid,t3ver_wsid)
-);
\ No newline at end of file
+);