login.php.svn-base

来自「PHP 知识管理系统(基于树结构的知识管理系统), 英文原版的PHP源码。」· SVN-BASE 代码 · 共 423 行 · 第 1/2 页

SVN-BASE
423
字号
        exit(0);    }    function do_login() {        $aExtra = array();        $oUser =& KTInterceptorRegistry::checkInterceptorsForAuthenticated();        if (is_a($oUser, 'User')) {            $res = $this->performLogin($oUser);            if ($res) {                $oUser = array($res);            }        }        if (is_array($oUser)) {            foreach ($oUser as $oError) {                if (is_a($oError, 'KTNoLocalUser')) {                    $aExtra = kt_array_merge($aExtra, $oError->aExtra);                }            }        }        KTInterceptorRegistry::checkInterceptorsForTakeOver();        $this->check();        global $default;        $language = KTUtil::arrayGet($_REQUEST, 'language');        if (empty($language)) {            $language = $default->defaultLanguage;        }        setcookie("kt_language", $language, 2147483647, '/');        $redirect = KTUtil::arrayGet($_REQUEST, 'redirect');        $url = $_SERVER["PHP_SELF"];        $queryParams = array();        if ($redirect !== null) {            $queryParams[] = 'redirect=' . urlencode($redirect);        }        $username = KTUtil::arrayGet($_REQUEST,'username');        $password = KTUtil::arrayGet($_REQUEST,'password');        if (empty($username)) {            $this->simpleRedirectToMain(_kt('Please enter your username.'), $url, $queryParams);        }        $oUser =& User::getByUsername($username);        if (PEAR::isError($oUser) || ($oUser === false)) {            if (is_a($oUser, 'ktentitynoobjects')) {                $this->handleUserDoesNotExist($username, $password, $aExtra);            }            $this->simpleRedirectToMain(_kt('Login failed.  Please check your username and password, and try again.'), $url, $queryParams);            exit(0);        }        if (empty($password)) {            $this->simpleRedirectToMain(_kt('Please enter your password.'), $url, $queryParams);        }        $authenticated = KTAuthenticationUtil::checkPassword($oUser, $password);        if (PEAR::isError($authenticated)) {            $this->simpleRedirectToMain(_kt('Authentication failure.  Please try again.'), $url, $queryParams);            exit(0);        }        if ($authenticated !== true) {            $this->simpleRedirectToMain(_kt('Login failed.  Please check your username and password, and try again.'), $url, $queryParams);            exit(0);        }        $res = $this->performLogin($oUser);        if ($res) {            $this->simpleRedirectToMain($res->getMessage(), $url, $queryParams);            exit(0);        }    }    function handleUserDoesNotExist($username, $password, $aExtra = null) {        if (empty($aExtra)) {            $aExtra = array();        }        // Check if the user has been deleted before allowing auto-signup        $delUser = User::checkDeletedUser($username);        if($delUser){            return ;        }        $oKTConfig = KTConfig::getSingleton();        $allow = $oKTConfig->get('session/allowAutoSignup', true);        if($allow){            $res = KTAuthenticationUtil::autoSignup($username, $password, $aExtra);            if (empty($res)) {                return $res;            }            if (is_a($res, 'User')) {                $this->performLogin($res);            }            if (is_a($res, 'KTAuthenticationSource')) {                $_SESSION['autosignup'] = $aExtra;                $this->redirectTo('autoSignup', array(                    'source_id' => $res->getId(),                    'username' => $username,                ));                exit(0);            }        }    }    function do_autoSignup() {        $oSource =& $this->oValidator->validateAuthenticationSource($_REQUEST['source_id']);        $oProvider =& KTAuthenticationUtil::getAuthenticationProviderForSource($oSource);        $oDispatcher = $oProvider->getSignupDispatcher($oSource);        $oDispatcher->subDispatch($this);        exit(0);    }    function do_checkCookie() {        $cookieTest = KTUtil::arrayGet($_COOKIE, "CookieTestCookie", null);        $cookieVerify = KTUtil::arrayGet($_REQUEST, 'cookieVerify', null);        $url = $_SERVER["PHP_SELF"];        $queryParams = array();        $redirect = KTUtil::arrayGet($_REQUEST, 'redirect');        if ($redirect !== null) {            $queryParams[] = 'redirect='. urlencode($redirect);        }        if ($cookieTest !== $cookieVerify) {            Session::destroy();            $this->simpleRedirectToMain(_kt('You must have cookies enabled to use the document management system.'), $url, $queryParams);            exit(0);        }        // check for a location to forward to        if ($redirect !== null) {            $url = $redirect;        // else redirect to the dashboard if there is none        } else {            $url = KTUtil::kt_url();            $config = KTConfig::getSingleton();            $redirectToBrowse = $config->get('KnowledgeTree/redirectToBrowse', false);            $redirectToDashboardList = $config->get('KnowledgeTree/redirectToBrowseExceptions', '');            if ($redirectToBrowse)            {                $exceptionsList = explode(',', str_replace(' ','',$redirectToDashboardList));                $user = User::get($_SESSION['userID']);                $username = $user->getUserName();                $url .= (in_array($username, $exceptionsList))?'/dashboard.php':'/browse.php';            }            else            {                $url .=  '/dashboard.php';            }        }        exit(redirect($url));    }}/** * Check if the last user logging in from the same IP as the current user timed out in the last hour. * * @param unknown_type $userId * @return unknown */function checkLastSessionUserID($userId){    // Get the current users IP Address    $sIp = '%'.$_SERVER['REMOTE_ADDR'];    // Get the time for a day ago and an hour ago    $dif = time() - (24*60*60);    $sDayAgo = date('Y-m-d H:i:s', $dif);    $dif2 = time() - (60*60);    $sHourAgo = date('Y-m-d H:i:s', $dif2);    // Get the session id for the last user to log in from the current IP address within the last day    // Use the session id to find if that user logged out or timed out within the last hour.	$sQuery = 'SELECT user_id, action_namespace FROM user_history        WHERE datetime > ? AND        session_id = (SELECT session_id FROM user_history WHERE comments LIKE ? AND datetime > ? ORDER BY id DESC LIMIT 1)        ORDER BY id DESC LIMIT 1';	$aParams = array($sHourAgo, $sIp, $sDayAgo);	$res = DBUtil::getOneResult(array($sQuery, $aParams));	if(PEAR::isError($res) || empty($res)){	    return false;	}	// Check whether the user timed out and whether it was the current user or a different one	if($res['action_namespace'] == 'ktcore.user_history.timeout' && $res['user_id'] != $userId){	    return true;	}	return false;}$dispatcher =& new LoginPageDispatcher();$dispatcher->dispatch();?>

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?