/** * Adds a new context to the user session context array. * * @access public * @param string $context The context to add to the user session. */ public function addSessionContext($context) { if (!$this->xpdo->startSession()) { $this->xpdo->log(xPDO::LOG_LEVEL_ERROR, "Attempt to start a session failed", '', __METHOD__, __FILE__, __LINE__); return; } if (!empty($context)) { $this->getSessionContexts(); session_regenerate_id(true); $this->getOne('Profile'); if ($this->Profile && $this->Profile instanceof modUserProfile) { $ua =& $this->Profile; if ($ua && !isset($this->sessionContexts[$context]) || $this->sessionContexts[$context] != $this->get('id')) { $ua->set('failedlogincount', 0); $ua->set('logincount', $ua->logincount + 1); $ua->set('lastlogin', $ua->thislogin); $ua->set('thislogin', time()); $ua->set('sessionid', session_id()); $ua->save(); } } $this->sessionContexts[$context] = $this->get('id'); $_SESSION['modx.user.contextTokens'] = $this->sessionContexts; if (!isset($_SESSION["modx.{$context}.user.token"])) { $_SESSION["modx.{$context}.user.token"] = $this->generateToken($context); } } else { $this->xpdo->log(xPDO::LOG_LEVEL_ERROR, "Attempt to login to a context with an empty key", '', __METHOD__, __FILE__, __LINE__); } }