protected function prepareSessionData () {
		if ($_SESSION === NULL) return;

		// read `\MvcCore\Session` storage
		$sessionClass = \MvcCore\Application::GetInstance()->GetSessionClass();
		$sessionRawMetaStore = $sessionClass::GetSessionMetadata();
		$sessionMetaStore = $sessionRawMetaStore instanceof \stdClass
			? $sessionRawMetaStore
			: (object) ['names' => []];
		$maxLifeTimes = (object) [
			'hoops'		=> 0,
			'seconds'	=> 0,
		];

		$standardRecords = [];
		$namespaceRecords = [];

		// look for each record in `$_SESSION`
		// if data are defined as session namespace
		// record in `\MvcCore\Session` meta store:
		foreach ($_SESSION as $sessionKey => $sessionData) {
			if ($sessionKey === self::$MetaStoreKey) continue;
			$item = new \stdClass;
			$item->key = $sessionKey;
			$item->value = \Tracy\Dumper::toHtml($sessionData);
			if (isset($sessionMetaStore->names[$sessionKey])) {
				if (count((array) $_SESSION[$sessionKey]) === 0)
					// this will be destroyed automatically by
					// \MvcCore\Session::Close();` before `session_write_close()`.
					continue;
				$item->type = self::_TYPE_NAMESPACE;
				$item->expirations = [];
				if (isset($sessionMetaStore->hoops[$sessionKey])) {
					$value = $sessionMetaStore->hoops[$sessionKey];
					$item->expirations[] = (object) [
						'type'	=> self::_EXPIRATION_HOOPS,
						'value'	=> $value,
						'text'	=> $value . ' hoops',
					];
					if ($value > $maxLifeTimes->hoops)
						$maxLifeTimes->hoops = $value;
				}
				if (isset($sessionMetaStore->expirations[$sessionKey])) {
					$value = $sessionMetaStore->expirations[$sessionKey] - $this->now;
					$item->expirations[] = (object) [
						'type'	=> self::_EXPIRATION_TIME,
						'value'	=> $value,
						'text'	=> $this->_formateMaxLifeTimestamp($value),
					];
					if ($value > $maxLifeTimes->seconds)
						$maxLifeTimes->seconds = $value;
				}
				$namespaceRecords[$sessionKey] = $item;
			} else {
				$item->type = self::_TYPE_PHP;
				$standardRecords[$sessionKey] = $item;
			}
		}

		ksort($standardRecords);
		ksort($namespaceRecords);
		$this->session = array_merge($namespaceRecords, $standardRecords);

		$maxLifeTimesItems = [];
		if ($maxLifeTimes->seconds > 0)
			$maxLifeTimesItems[] = $this->_formateMaxLifeTimestamp($maxLifeTimes->seconds);
		if ($maxLifeTimes->hoops > 0)
			$maxLifeTimesItems[] = $maxLifeTimes->hoops . ' hoops';
		$this->sessionMaxLifeTime = implode(', ', $maxLifeTimesItems);
	}