2011-10-16 63 views
0

我想拥有它,所以如果我从我的网站的一部分登录,它也会登录到其他部分。Codeigniter单一网站登录

一些注意事项:

  • 所有登录连接到同一个数据库...可以称之为DB1
  • 站点1的表phpfox
  • 站点2的表是vBulletin
  • 眼下它成功登录到phpfox,但我无法弄清楚如何登录论坛也....我已经添加了几行代码以尝试做到这一点,但我不知道它:
  • 问题是我要保持我的网站的每个部分登录(使用相同的用户名和密码)

这里是我当前的代码:

function login($username, $password, $passClean = null) 
{ 

    $this->faildLogins = new DB_FaildLogins(); 

    $ip = $this->input->ip_address(); 

    $faildLogins = $this->faildLogins->getFaildLoginsByIp($ip); 

    if($faildLogins){ 
     if($faildLogins->bannedTime > 0){ 
      $timeElapsed = ($faildLogins->lastTryDate + $faildLogins->bannedTime)-time(); 
      if($timeElapsed > 0){ 
       return sprintf('Your ip (%s) was banned for %s please try again after expire ban time!', $this->input->ip_address(), seconds2HumanTimeFormat($timeElapsed)); 
      } 
     } 
    } 

    $result = $this->user_model->get_login_info($username); 

    if ($result) { 
     if ($result->status == 'pending') { 
      return 'INACTIVE'; 
     } 

     if ($result->status == 'rejected') { 
      return 'REJECTED'; 
     } 


     if ($password === $result->password) { 
      $this->CI->session->set_userdata(array('id'=> $result->id)); 

      $this->user_model->addUserLogin($result->id); 

      $faildLogins = $this->faildLogins->getFaildLoginsByIp($ip); 
      if($faildLogins){ 
       $this->faildLogins->resetFaildLoginToIp($ip); 
      } 
      return TRUE; 

     // If passwords don't match 
     } else { 

     @mysql_connect('localhost', 'db1', 'db1_password') or die ("Can't connect to DB!"); 
     @mysql_connect('localhost', 'db1', 'db1_password', true) or die ("Can't connect to DB!"); 
     @mysql_select_db('phpfox') or die ("Can't select DB!"); 
     @mysql_select_db('vbulletin') or die ("Can't select DB!"); 

      $phpFoxUser = mysql_fetch_array(mysql_query("SELECT * FROM `phpfox_user` WHERE `user_name` = '{$username}'"), MYSQL_ASSOC); 

      if($phpFoxUser['user_name'] == $username AND 
        $phpFoxUser['email'] == $result->email AND 
        md5(md5($passClean).md5($phpFoxUser['password_salt'])) == $phpFoxUser['password']) { 

       $DBUsers = new DB_Users(); 
       $rows['id']    = $result->id; 
       $rows['password']  = md5($passClean); 

       if($DBUsers->saveIt($rows)) { 
        $this->CI->session->set_userdata(array('id'=> $result->id)); 
        return TRUE; 
       } else { 
        $this->faildLogins->addFaildLoginToIp($ip); 
        return FALSE; 
       } 
      } else { 
       $this->faildLogins->addFaildLoginToIp($ip); 
       return FALSE; 
      } 
     } 

    } else { 
     @mysql_connect('localhost', 'db1', 'db1_password') or die ("Can't connect to DB!"); 
     @mysql_connect('localhost', 'db1', 'db1_password', true) or die ("Can't connect to DB!"); 
     @mysql_select_db('phpfox') or die ("Can't select DB!"); 
     @mysql_select_db('vbulletin') or die ("Can't select DB!"); 

     $result = mysql_query("SELECT * FROM `phpfox_user` WHERE `user_name` = '{$username}'"); 
     $phpFoxUser = mysql_fetch_array($result, MYSQL_ASSOC); 

     if($phpFoxUser['user_name'] == $username AND md5(md5($passClean).md5($phpFoxUser['password_salt'])) == $phpFoxUser['password']) { 

      $DBUsers = new DB_Users(); 
      $rows['username']   = $phpFoxUser['user_name']; 
      $rows['password']   = md5($passClean); 
      $rows['usergroup']   = 'user'; 
      $rows['email']    = $phpFoxUser['email']; 
      $rows['activationCode']  = md5(time()); 
      $rows['status']    = 'approved'; 
      $rows['registerDate']  = time(); 
      $rows['registerIp']   = $this->input->ip_address(); 
      $rows['hash']    = uniqid(rand().rand().rand(), true); 

      $newUserId = $DBUsers->saveIt($rows); 

      if($newUserId) { 
       $this->CI->session->set_userdata(array('id'=> $newUserId)); 
       return TRUE;      
      } else { 
       return false; 
      } 


     } else { 
      $this->faildLogins->addFaildLoginToIp($ip); 
      return FALSE; 
     } 

     //md5(md5($sPassword) . md5($sSalt)) 
    } 

    $this->faildLogins->addFaildLoginToIp($ip); 
    return FALSE; 
} 

回答

1

设置会话变量,以独特的东西给用户,像userid。

$_SESSION['UserId'] = $id; 

然后,检查登录函数顶部的会话变量。

if (isset($_SESSION['UserId']) // user already logged in 
    $ret = 'ACTIVE'; 

然后在你的函数的底部

return $ret; 

BTW:我会摆脱多重收益在功能和使用$ RET变量,在我的例子。另外,不要忘记,当用户注销时删除您的会话变量:

unset($_SESSION['UserId']); 

此外,您还可以在需要登录的用户的任何页面的顶部检查会话变量,并重定向到登录页面,如果没有设置。