/**
* Create the session record
*
* @param SessionInterface $session The session to create the metadata record for.
* @param User $user The user to associate with the record.
*
* @return void
*
* @since 4.0.0
*/
private function createSessionRecord(SessionInterface $session, User $user)
{
$query = $this->db->getQuery(true);
$time = $session->isNew() ? time() : $session->get('session.timer.start');
$columns = [$this->db->quoteName('session_id'), $this->db->quoteName('guest'), $this->db->quoteName('time'), $this->db->quoteName('userid'), $this->db->quoteName('username')];
// Add query placeholders
$values = [':session_id', ':guest', ':time', ':user_id', ':username'];
// Bind query values
$sessionId = $session->getId();
$userIsGuest = $user->guest;
$userId = $user->id;
$username = $user->username === null ? '' : $user->username;
$query->bind(':session_id', $sessionId)->bind(':guest', $userIsGuest, ParameterType::INTEGER)->bind(':time', $time)->bind(':user_id', $userId, ParameterType::INTEGER)->bind(':username', $username);
if ($this->app instanceof CMSApplication && !$this->app->get('shared_session', false)) {
$clientId = $this->app->getClientId();
$columns[] = $this->db->quoteName('client_id');
$values[] = ':client_id';
$query->bind(':client_id', $clientId, ParameterType::INTEGER);
}
$query->insert($this->db->quoteName('#__session'))->columns($columns)->values(implode(', ', $values));
$this->db->setQuery($query);
try {
$this->db->execute();
} catch (ExecutionFailureException $e) {
// This failure isn't critical, we can go on without the metadata
}
}