Opencart整合phpbb实现同步登录、注册、退出

2014-04-22 14:59:14  雅事达网络 我有话说(184人参与)
Opencart整合phpbb实现同步登录、注册、退出 Opencart整合phpbb实现同步登录、注册、退出

最近帮客户二次开发,实现Opencart和phpbb的同步登录、注册和退出。这2个开源程序就不多说了,都是各自领域非常经典的系统。做的过程中,参考了《Zen-cart整合phpBB同步登录》,补充了同步退出功能。先分享如下:

一、系统准备

Opencart:1.5.6.4 + phpbb:3.0.1.2 

二、实现功能

1)用户登录、注册,都在opencart的页面进行,同步Opencart和phpbb登录、注册、修改密码和退出;

2)用户登录后,opencart和phpbb两个程序都显示登录状态;

3)客人注册一次就在oc和phpbb都有账户,如果修改密码,也不会出现异常

4)退出的时候,无论在oc或者phpbb退出,另一边也同步退出


三、实现过程

在catalog/model/account/customer.php中增加以下函数:

    //产生一个phpBB的session,实现phpbb的同步登录

    function create_session($username,$password){
        if(!$username || !$password){
            return ;
        }
        $sessionIp='';
        $cookie_path='';
        $cookieName='';
        $session_id=$this->create_sess_id(32);
        $query = $this->db->query("select * FROM " . DB_BBS_PREFIX . "config where `config_name` in ('cookie_domain','cookie_name','cookie_path')");
                
        foreach ($query->rows as $result) {
            
            if($result['config_name']=='cookie_domain'){
                $sessionIp=$result['config_value'];
            }
            if($result['config_name']=='cookie_path'){
                $cookie_path=$result['config_value'];
            }
            if($result['config_name']=='cookie_name'){
                $cookieName=$result['config_value'];
            }
            
        }
                
        //exit($cookieName.'--'.$sessionIp.'--'.$cookie_path);
        $userBrowserInfo= $_SERVER["HTTP_USER_AGENT"];
        $userIpAdd=empty($_SERVER["HTTP_CLIENT_IP"])?'127.0.0.1':$_SERVER["HTTP_CLIENT_IP"];
        $cmd_username=$username;
        $user_id=$this->getUseridByUsername($cmd_username);


        setcookie($cookieName.'_u',$user_id,time()+100000000,'','',false);
        //往Cookies里插入SessionID信息
        setcookie($cookieName.'_sid',$session_id,time()+100000000,'','',false);
        //往phpb_sessions表中插入Session信息
        $session_table= DB_BBS_PREFIX.'sessions';
        $sqlcommand="insert into ".$session_table."(session_id,session_user_id,session_last_visit,session_start,session_time,session_ip,session_browser,session_page)";
        $sqlcommand.=" values('$session_id',$user_id,'".time()."','".time()."','".time()."','$userIpAdd','$userBrowserInfo','index.php')";

        $this->db->query($sqlcommand);
    }
    
    //删除phpBB的session,实现phpbb的同步退出
    function kill_session($username){
    
        $sessionIp='';
        $cookie_path='';
        $cookieName='';
        $session_id=$this->create_sess_id(32);
        $query = $this->db->query("select * FROM " . DB_BBS_PREFIX . "config where `config_name` in ('cookie_domain','cookie_name','cookie_path')");
    
        foreach ($query->rows as $result) {
                
            if($result['config_name']=='cookie_domain'){
                $sessionIp=$result['config_value'];
            }
            if($result['config_name']=='cookie_path'){
                $cookie_path=$result['config_value'];
            }
            if($result['config_name']=='cookie_name'){
                $cookieName=$result['config_value'];
            }
                
        }
    
        //exit($cookieName.'--'.$sessionIp.'--'.$cookie_path);
        $userBrowserInfo= $_SERVER["HTTP_USER_AGENT"];
        $userIpAdd=empty($_SERVER["HTTP_CLIENT_IP"])?'127.0.0.1':$_SERVER["HTTP_CLIENT_IP"];
        $cmd_username=$username;
        $user_id=$this->getUseridByUsername($cmd_username);
    
    
        setcookie($cookieName.'_u',$user_id,time()+100000000,'','',false);
        //往Cookies里插入SessionID信息
        setcookie($cookieName.'_sid',$session_id,time()+100000000,'','',false);
        //往phpb_sessions表中插入Session信息
        $session_table= DB_BBS_PREFIX.'sessions';
        $sqlcommand="delete from ".$session_table." WHERE session_user_id = ' . (int)$user_id . '";
    
        $this->db->query($sqlcommand);
    }
    
    function create_sess_id($len=32){//产生一个session_id
        list($u, $s) = explode(' ', microtime());
        $time = (float)$u + (float)$s;// 获取当前时间的微秒
        $rand_num = rand(100000, 999999);
        $rand_num = rand($rand_num, $time);
        mt_srand($rand_num);
        $rand_num = mt_rand();// 产生一个随机数
        $sess_id = md5( md5($time). md5($rand_num) );// 产生SessionID
        $sess_id = substr($sess_id, 0, $len);
        return $sess_id;// 截取指定需要长度的SessionID
    }

 

有了以上代码,只需要在Opencart以下页面增加相应代码即可:

1)同步登录

catalog/controller/account/login.php 找到:

if (($this->request->server['REQUEST_METHOD'] == 'POST') && $this->validate()) {

在下面增加:

  //for bbs login            

 $this->model_account_customer->create_session($this->request->post['email'], $this->request->post['password']);

 

2)同步退出

catalog/controller/account/logout.php找到

if ($this->customer->isLogged()) {

在下面增加:
$this->load->model('account/customer');
$this->model_account_customer->kill_session($this->customer->getEmail());

 

3)同步注册

在catalog/model/account/customer.php 中addCustomer函数里添加增加phpbb会员的sql语句即可。

感谢浏览,如需转载,请注明雅事达网络(Yastar.com),谢谢合作!

 

 

分享到:

已有37条评论,共184人参与

还没有评论
最新评论刷新
建海666
这里是博客评论区,请登录
32分钟前
果果明赫
这里是博客评论区,请登录
60分钟前