Remove virtual session DBO classes
authorTim Düsterhus <duesterhus@woltlab.com>
Fri, 2 Oct 2020 08:53:19 +0000 (10:53 +0200)
committerTim Düsterhus <duesterhus@woltlab.com>
Fri, 2 Oct 2020 12:26:21 +0000 (14:26 +0200)
Virtual sessions are no longer supported. The TODO comments will be fixed with
a later commit.

wcfsetup/install/files/lib/acp/action/UserExportGdprAction.class.php
wcfsetup/install/files/lib/data/acp/session/virtual/ACPSessionVirtual.class.php [deleted file]
wcfsetup/install/files/lib/data/acp/session/virtual/ACPSessionVirtualAction.class.php [deleted file]
wcfsetup/install/files/lib/data/acp/session/virtual/ACPSessionVirtualEditor.class.php [deleted file]
wcfsetup/install/files/lib/data/acp/session/virtual/ACPSessionVirtualList.class.php [deleted file]
wcfsetup/install/files/lib/data/session/virtual/SessionVirtual.class.php [deleted file]
wcfsetup/install/files/lib/data/session/virtual/SessionVirtualAction.class.php [deleted file]
wcfsetup/install/files/lib/data/session/virtual/SessionVirtualEditor.class.php [deleted file]
wcfsetup/install/files/lib/data/session/virtual/SessionVirtualList.class.php [deleted file]
wcfsetup/install/files/lib/system/cronjob/SessionCleanUpCronjob.class.php
wcfsetup/install/files/lib/system/session/SessionHandler.class.php

index b0202ef9e16ca13f502bd3dd7ceae3fc99e869d1..5109b508dd4f8e88d5cf4f761762871e7a6dd8e9 100644 (file)
@@ -270,33 +270,17 @@ class UserExportGdprAction extends AbstractAction {
        }
        
        protected function exportSessionIpAddresses() {
-               $exportFromVirtual = function ($sessionTable, $sessionVirtualTable) {
-                       $sql = "SELECT  sv.ipAddress, sv.lastActivityTime
-                               FROM    ${sessionVirtualTable} sv
-                               WHERE   sv.sessionID IN (
-                                               SELECT  sessionID
-                                               FROM    ${sessionTable}
-                                               WHERE   userID = ?
-                                       )";
-                       $statement = WCF::getDB()->prepareStatement($sql);
-                       $statement->execute([$this->user->userID]);
-                       
-                       return $this->fetchIpAddresses($statement, 'ipAddress', 'lastActivityTime');
-               };
-               
                $data = [
                        'session' => [],
                        'acpSession' => [],
                        'acpSessionLog' => []
                ];
                
-               // we can safely ignore the wcfN_session table in this case, because its data is
-               // just mirrored from the virtual session table, except that it shows the data
-               // from the last client only
-               $data['session'] = $exportFromVirtual('wcf' . WCF_N . '_session', 'wcf' . WCF_N . '_session_virtual');
+               // TODO: Fix this.
+               $data['session'] = [];
                
-               // ACP sessions always support virtualization
-               $data['acpSession'] = $exportFromVirtual('wcf' . WCF_N . '_acp_session', 'wcf' . WCF_N . '_acp_session_virtual');
+               // TODO: Fix this.
+               $data['acpSession'] = [];
                
                // we can ignore the wcfN_acp_session_access_log table because it is directly related
                // to the wcfN_acp_session_log table and ACP sessions are bound to the ip address 
diff --git a/wcfsetup/install/files/lib/data/acp/session/virtual/ACPSessionVirtual.class.php b/wcfsetup/install/files/lib/data/acp/session/virtual/ACPSessionVirtual.class.php
deleted file mode 100644 (file)
index 3b69659..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-<?php
-namespace wcf\data\acp\session\virtual;
-use wcf\data\DatabaseObject;
-use wcf\system\WCF;
-use wcf\util\UserUtil;
-
-/**
- * Virtual Sessions extend the original session system with a transparent layer. 
- * It's only purpose is to enforce session validation based on IP address and/or user agent.
- * 
- * The legacy session system does not allow the same user being logged-in more than once 
- * and the same is true for WCF 2.1 unless we break most parts of the API. 
- * In order to solve this, we do allow multiple clients to share the exact same session 
- * among them, while the individual clients are tracked within wcf1_session_virtual.
- * 
- * @author     Alexander Ebert
- * @copyright  2001-2019 WoltLab GmbH
- * @license    GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
- * @package    WoltLabSuite\Core\Data\Acp\Session\Virtual
- * 
- * @property-read      integer         $virtualSessionID       unique id of the virtual acp session
- * @property-read      string          $sessionID              id of the acp session the virtual acp session belongs to
- * @property-read      string          $ipAddress              id of the user whom the virtual acp session belongs to
- * @property-read      string          $userAgent              user agent of the user whom the virtual acp session belongs to
- * @property-read      integer         $lastActivityTime       timestamp at which the latest activity occurred
- */
-class ACPSessionVirtual extends DatabaseObject {
-       /**
-        * @inheritDoc
-        */
-       protected static $databaseTableIndexName = 'virtualSessionID';
-       
-       /**
-        * Returns the active virtual session object or null.
-        * 
-        * @param       string          $sessionID
-        * @return      ACPSessionVirtual
-        */
-       public static function getExistingSession($sessionID) {
-               $sql = "SELECT  *
-                       FROM    ".static::getDatabaseTableName()."
-                       WHERE   sessionID = ?
-                               AND ipAddress = ?
-                               AND userAgent = ?";
-               $statement = WCF::getDB()->prepareStatement($sql);
-               $statement->execute([
-                       $sessionID,
-                       UserUtil::getIpAddress(),
-                       UserUtil::getUserAgent()
-               ]);
-               
-               return $statement->fetchObject(static::class);
-       }
-       
-       /**
-        * Returns the number of virtual sessions associated with the given session id.
-        * 
-        * @param       string          $sessionID
-        * @return      integer
-        */
-       public static function countVirtualSessions($sessionID) {
-               $sql = "SELECT  COUNT(*) AS count
-                       FROM    ".static::getDatabaseTableName()."
-                       WHERE   sessionID = ?";
-               $statement = WCF::getDB()->prepareStatement($sql);
-               $statement->execute([$sessionID]);
-               
-               return $statement->fetchSingleColumn();
-       }
-}
diff --git a/wcfsetup/install/files/lib/data/acp/session/virtual/ACPSessionVirtualAction.class.php b/wcfsetup/install/files/lib/data/acp/session/virtual/ACPSessionVirtualAction.class.php
deleted file mode 100644 (file)
index a715e0b..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-<?php
-namespace wcf\data\acp\session\virtual;
-use wcf\data\AbstractDatabaseObjectAction;
-use wcf\util\UserUtil;
-
-/**
- * Executes virtual session-related actions.
- * 
- * @author     Alexander Ebert
- * @copyright  2001-2019 WoltLab GmbH
- * @license    GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
- * @package    WoltLabSuite\Core\Data\Acp\Session\Virtual
- * 
- * @method     ACPSessionVirtualEditor[]       getObjects()
- * @method     ACPSessionVirtualEditor         getSingleObject()
- */
-class ACPSessionVirtualAction extends AbstractDatabaseObjectAction {
-       /**
-        * @inheritDoc
-        */
-       protected $className = ACPSessionVirtualEditor::class;
-       
-       /**
-        * Attention: This method does not always return a new object, in case a matching virtual session
-        * already exists, the existing session will be returned rather than a new session being created.
-        * 
-        * @return      ACPSessionVirtual
-        */
-       public function create() {
-               // try to find an existing virtual session
-               $baseClass = call_user_func([$this->className, 'getBaseClass']);
-               $virtualSession = call_user_func([$baseClass, 'getExistingSession'], $this->parameters['data']['sessionID']);
-               if ($virtualSession !== null) {
-                       return $virtualSession;
-               }
-               
-               if (!isset($this->parameters['data']['lastActivityTime'])) $this->parameters['data']['lastActivityTime'] = TIME_NOW;
-               if (!isset($this->parameters['data']['ipAddress'])) $this->parameters['data']['ipAddress'] = UserUtil::getIpAddress();
-               if (!isset($this->parameters['data']['userAgent'])) $this->parameters['data']['userAgent'] = UserUtil::getUserAgent();
-               
-               /** @noinspection PhpIncompatibleReturnTypeInspection */
-               return parent::create();
-       }
-}
diff --git a/wcfsetup/install/files/lib/data/acp/session/virtual/ACPSessionVirtualEditor.class.php b/wcfsetup/install/files/lib/data/acp/session/virtual/ACPSessionVirtualEditor.class.php
deleted file mode 100644 (file)
index 27b29e6..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-<?php
-namespace wcf\data\acp\session\virtual;
-use wcf\data\DatabaseObjectEditor;
-use wcf\system\WCF;
-
-/**
- * Provides functions to edit virtual sessions.
- * 
- * @author     Alexander Ebert
- * @copyright  2001-2019 WoltLab GmbH
- * @license    GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
- * @package    WoltLabSuite\Core\Data\Acp\Session\Virtual
- * 
- * @method static      ACPSessionVirtual       create(array $parameters = [])
- * @method             ACPSessionVirtual       getDecoratedObject()
- * @mixin              ACPSessionVirtual
- */
-class ACPSessionVirtualEditor extends DatabaseObjectEditor {
-       /**
-        * @inheritDoc
-        */
-       protected static $baseClass = ACPSessionVirtual::class;
-       
-       /**
-        * Updates last activity time of this virtual session.
-        */
-       public function updateLastActivityTime() {
-               $this->update(['lastActivityTime' => TIME_NOW]);
-       }
-       
-       /**
-        * Deletes the expired virtual sessions.
-        * 
-        * @param       integer         $timestamp
-        */
-       public static function deleteExpiredSessions($timestamp) {
-               $sql = "DELETE FROM     ".call_user_func([static::$baseClass, 'getDatabaseTableName'])."
-                       WHERE           lastActivityTime < ?";
-               $statement = WCF::getDB()->prepareStatement($sql);
-               $statement->execute([$timestamp]);
-       }
-}
diff --git a/wcfsetup/install/files/lib/data/acp/session/virtual/ACPSessionVirtualList.class.php b/wcfsetup/install/files/lib/data/acp/session/virtual/ACPSessionVirtualList.class.php
deleted file mode 100644 (file)
index c2d935d..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-<?php
-namespace wcf\data\acp\session\virtual;
-use wcf\data\DatabaseObjectList;
-
-/**
- * Represents a list of virtual sessions.
- * 
- * @author     Alexander Ebert
- * @copyright  2001-2019 WoltLab GmbH
- * @license    GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
- * @package    WoltLabSuite\Core\Data\Acp\Session\Virtual
- *
- * @method     ACPSessionVirtual               current()
- * @method     ACPSessionVirtual[]             getObjects()
- * @method     ACPSessionVirtual|null          search($objectID)
- * @property   ACPSessionVirtual[]             $objects
- */
-class ACPSessionVirtualList extends DatabaseObjectList {
-       /**
-        * @inheritDoc
-        */
-       public $className = ACPSessionVirtual::class;
-}
diff --git a/wcfsetup/install/files/lib/data/session/virtual/SessionVirtual.class.php b/wcfsetup/install/files/lib/data/session/virtual/SessionVirtual.class.php
deleted file mode 100644 (file)
index 9397996..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-<?php
-namespace wcf\data\session\virtual;
-use wcf\data\acp\session\virtual\ACPSessionVirtual;
-
-/**
- * Virtual sessions for the frontend.
- * 
- * @see                \wcf\data\acp\session\virtual\ACPSessionVirtual
- * @author     Tim Duesterhus
- * @copyright  2001-2019 WoltLab GmbH
- * @license    GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
- * @package    WoltLabSuite\Core\Data\Session\Virtual
- */
-class SessionVirtual extends ACPSessionVirtual {}
diff --git a/wcfsetup/install/files/lib/data/session/virtual/SessionVirtualAction.class.php b/wcfsetup/install/files/lib/data/session/virtual/SessionVirtualAction.class.php
deleted file mode 100644 (file)
index dac0678..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-<?php
-namespace wcf\data\session\virtual;
-use wcf\data\acp\session\virtual\ACPSessionVirtualAction;
-
-/**
- * Virtual sessions for the frontend.
- * 
- * @see                \wcf\data\acp\session\virtual\ACPSessionVirtualAction
- * @author     Tim Duesterhus
- * @copyright  2001-2019 WoltLab GmbH
- * @license    GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
- * @package    WoltLabSuite\Core\Data\Session\Virtual
- * 
- * @method     SessionVirtual          create()
- * @method     SessionVirtualEditor[]  getObjects()
- * @method     SessionVirtualEditor    getSingleObject()
- */
-class SessionVirtualAction extends ACPSessionVirtualAction {
-       /**
-        * @inheritDoc
-        */
-       protected $className = SessionVirtualEditor::class;
-}
diff --git a/wcfsetup/install/files/lib/data/session/virtual/SessionVirtualEditor.class.php b/wcfsetup/install/files/lib/data/session/virtual/SessionVirtualEditor.class.php
deleted file mode 100644 (file)
index b136756..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-<?php
-namespace wcf\data\session\virtual;
-use wcf\data\acp\session\virtual\ACPSessionVirtualEditor;
-
-/**
- * Virtual sessions for the frontend.
- * 
- * @see                \wcf\data\acp\session\virtual\ACPSessionVirtualEditor
- * @author     Tim Duesterhus
- * @copyright  2001-2019 WoltLab GmbH
- * @license    GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
- * @package    WoltLabSuite\Core\Data\Session\Virtual
- * 
- * @method     SessionVirtual          getDecoratedObject()
- * @mixin      SessionVirtual
- */
-class SessionVirtualEditor extends ACPSessionVirtualEditor {
-       /**
-        * @inheritDoc
-        */
-       protected static $baseClass = SessionVirtual::class;
-}
diff --git a/wcfsetup/install/files/lib/data/session/virtual/SessionVirtualList.class.php b/wcfsetup/install/files/lib/data/session/virtual/SessionVirtualList.class.php
deleted file mode 100644 (file)
index 9c8215e..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-<?php
-namespace wcf\data\session\virtual;
-use wcf\data\acp\session\virtual\ACPSessionVirtualList;
-
-/**
- * Virtual sessions for the frontend.
- * 
- * @see                \wcf\data\acp\session\virtual\ACPSessionVirtualList
- * @author     Tim Duesterhus
- * @copyright  2001-2019 WoltLab GmbH
- * @license    GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
- * @package    WoltLabSuite\Core\Data\Session\Virtual
- *
- * @method     SessionVirtual          current()
- * @method     SessionVirtual[]        getObjects()
- * @method     SessionVirtual|null     search($objectID)
- * @property   SessionVirtual[]        $objects
- */
-class SessionVirtualList extends ACPSessionVirtualList {
-       /**
-        * @inheritDoc
-        */
-       public $className = SessionVirtual::class;
-}
index a72c0496e648114275fc5d9dfa0d594fea6d4307..dcca6020154f17bc43bffd23a34e9fa2c0cdc9c3 100644 (file)
@@ -1,9 +1,7 @@
 <?php
 namespace wcf\system\cronjob;
-use wcf\data\acp\session\virtual\ACPSessionVirtualEditor;
 use wcf\data\acp\session\ACPSessionEditor;
 use wcf\data\cronjob\Cronjob;
-use wcf\data\session\virtual\SessionVirtualEditor;
 use wcf\data\session\SessionEditor;
 
 /**
@@ -24,10 +22,8 @@ class SessionCleanUpCronjob extends AbstractCronjob {
                // Prevent the sessions from expiring while the development mode is active.
                if (!ENABLE_DEBUG_MODE || !ENABLE_DEVELOPER_TOOLS) {
                        ACPSessionEditor::deleteExpiredSessions(TIME_NOW - SESSION_TIMEOUT);
-                       ACPSessionVirtualEditor::deleteExpiredSessions(TIME_NOW - SESSION_TIMEOUT);
                }
                
                SessionEditor::deleteExpiredSessions(TIME_NOW - SESSION_TIMEOUT);
-               SessionVirtualEditor::deleteExpiredSessions(TIME_NOW - SESSION_TIMEOUT);
        }
 }
index 6fb01994317641ba2d5fdd23f9c6e77e1bfed81d..46551b0968035528da524403a5853c432f04247d 100644 (file)
@@ -1,7 +1,5 @@
 <?php
 namespace wcf\system\session;
-use wcf\data\acp\session\virtual\ACPSessionVirtual;
-use wcf\data\session\virtual\SessionVirtual;
 use wcf\data\session\SessionEditor;
 use wcf\data\user\User;
 use wcf\data\user\UserEditor;
@@ -648,12 +646,7 @@ class SessionHandler extends SingletonFactory {
                        // user -> guest (logout)
                        //
                        case 0:
-                               if ($this->isACP) {
-                                       $sessionCount = ACPSessionVirtual::countVirtualSessions($this->session->sessionID);
-                               }
-                               else {
-                                       $sessionCount = SessionVirtual::countVirtualSessions($this->session->sessionID);
-                               }
+                               $sessionCount = 1;
                                
                                // there are still other virtual sessions, create a new session
                                if ($sessionCount) {