/** * Starts or resumes a session * * @return mixed If a session was resumed, the number of seconds it has been inactive previously. If a new session was started: TRUE */ protected function startOrResume() { session_start(); $this->sessionId = session_id(); $this->started = TRUE; $previousInactivityInSeconds = TRUE; if ($this->hasKey('TYPO3_FLOW3_Session_LastActivity')) { $previousInactivityInSeconds = time() - $this->getData('TYPO3_FLOW3_Session_LastActivity'); } $this->putData('TYPO3_FLOW3_Session_LastActivity', time()); if ($this->hasKey('TYPO3_FLOW3_Object_ObjectManager') === TRUE) { $sessionObjects = $this->getData('TYPO3_FLOW3_Object_ObjectManager'); if (is_array($sessionObjects)) { foreach ($sessionObjects as $object) { if ($object instanceof \TYPO3\FLOW3\Object\Proxy\ProxyInterface) { $objectName = $this->objectManager->getObjectNameByClassName(get_class($object)); if ($this->objectManager->getScope($objectName) === ObjectConfiguration::SCOPE_SESSION) { $this->objectManager->setInstance($objectName, $object); $this->lazyLoadingAspect->registerSessionInstance($objectName, $object); $object->__wakeup(); } } } } else { // Fallback for some malformed session data, if it is no array but something else. // In this case, we reset all session objects (graceful degradation). $this->putData('TYPO3_FLOW3_Object_ObjectManager', array()); } } return $previousInactivityInSeconds; }