Extra Shoplogin um den Shop überhaupt zu sehen | Wer kann bei der Umsetzung helfen?

Holla, habe ein echtes Problem. Wir haben für unsere Gewerbekunden jeweils Subshops eingerichtet, die man aber nicht so ohne weiteres erreichen darf. Deshalb habe ich eine kleine Seite gemacht, auf der man sich einloggen muss. Von dieser wird man nach erfolgreichem LogIn in den jeweiligen SubShop geleitet. Der soll anhand der übergebenen ID nun in einer Tabelle nachsehen ob der User sich auf der Anmeldeseite eingeloggt hat und wenn ja den Shop anzeigen und die shopware session id in die gleiche Tabelle schreiben. Anhand derer weiss Shopware nun, der User darf und setzt mit jedem Seitenaufruf einen aktuellen Zeitstempel.

Ich habe zwar ein kleines PlugIn geschrieben, muss allerdings den Cache abschalten, damit das ganze funktioniert. Ist natürlich Mist, weil der Shop dann ewig langsam wird. Kann mir jemand helfen das vernünftig hin zu bekommen?

So sieht das ganze aus:

 'addTemplateVars',
			'Enlight_Controller_Request' => 'addTemplateVars',
            'Enlight_Controller_Action_PreDispatch_Frontend' => 'addTemplateVars',
            'Enlight_Controller_Action_PreDispatch_Widgets' => 'addTemplateVars',
            'Enlight_Controller_Action_PostDispatchSecure_Frontend' => 'addTemplateVars',
            'Enlight_Controller_Action_PostDispatchSecure_Widgets' => 'addTemplateVars'			
			];
	}

	public function install(InstallContext $context) {
		return true;
	}

	public function update(UpdateContext $context) {
		return true;
	}

	public function activate(ActivateContext $context) {
		return true;
	}

	public function deactivate(DeactivateContext $context) {
		return true;
	}

	public function uninstall(UninstallContext $context) {
		return true;
	}

    public function addTemplateVars(\Enlight_Event_EventArgs $args){
	
		/ ***ID aus Link holen*** /
		$GwShop->ShopID = Shopware()->Shop()->getId();
		/***Shop ID holen (Das sind die SubShops die für die Öffentlichkeit gesperrt sein sollen)***/
		if ( Shopware()->Shop()->getId() == 11 
			OR Shopware()->Shop()->getId() == 12
			OR Shopware()->Shop()->getId() == 13
			OR Shopware()->Shop()->getId() == 14
			OR Shopware()->Shop()->getId() == 15
			OR Shopware()->Shop()->getId() == 16
			OR Shopware()->Shop()->getId() == 17
			OR Shopware()->Shop()->getId() == 18
			OR Shopware()->Shop()->getId() == 19
			OR Shopware()->Shop()->getId() == 20
			OR Shopware()->Shop()->getId() == 21
			OR Shopware()->Shop()->getId() == 23) 
		{
		
			$connection = $this->container->get('dbal_connection');
			/** @var $controller \Enlight_Controller_Action */
			$controller = $args->getSubject();
			/ ***cache deaktivieren um immer lifedaten zu bekommen** BLÖDE LÖSUNG **/
			$controller->Response()->setHeader('Cache-Control','no-cache, no-store, must-revalidate');
			$controller->Response()->setHeader('Pragma','no-cache');
			$controller->Response()->setHeader('Expires','0');
			
			$request = $controller->Request();
			$view = $controller->View();
			$response = $controller->Response();
			
			/ ***Prüfen ob ein Eintrag in der Tabelle vorhanden ist*** /

			$sql = 'SELECT * FROM gw_plugin_usersession WHERE sessionID = "'.$request->getParam("gwid").'" OR ShopwareSessionID = "'.session_id().'" ';
			$result = $connection->query($sql)->fetch();

			if ($result['id'] > 0 and (time()-$result['timeStamp']) < 1800 ) {

				$sql = 'UPDATE gw_plugin_usersession SET timeStamp = :timeStampSet, ShopwareSessionID = :ShopwareSessionIDSet WHERE id = :id ';
				$statement = $connection->prepare($sql);
				$statement->execute([
				'timeStampSet' => time(), 
				'id' => $result['id'],
				'ShopwareSessionIDSet' => session_id(),
				]);

				$controller = $args->get('subject');
				$view = $controller->View();				
				$view->assign('GwId', $result['id'] );
				$view->assign('GwSession', $result['sessionID'] );
				
			}	else	{
				/ ***Wenn die Zeit abgelaufen oder kein Eintrag in der Tabelle, dann zurück zum Login*** /
				header("Location: https://gewerbeshop.workwear25.de/index.php"); exit;
				
			}

			
		}
	
    }
	
}

Wie gesagt, es funktioniert zwar aber die Endlösung kann es nicht sein. Leider haben sich Kunden schon darüber beschwert, dass der jeweilige Shop so langsam ist.

folgende Felder gibt es in der Tabelle gw_plugin_usersession : id | shopID | timeStamp | sessionID | ShopwareSessionID | userIP

Vielleicht erbarmt sich jemand hier Hand anzulegen… Würd mich riesig freuen.