Zen-cart整合phpBB同步登錄

 $phpBB->careate_session($nick,$password);//和phpbb共享登錄狀態

這幾天在公司裏面搞zen-cart,要求zen-cart商城和論壇能夠同步註冊和登錄,其實同步註冊修改個人信息zen-cart已經整合了,就是同步登錄的問題沒有,到網上找了一下,都是說搞一個新的頁面,個人覺得不好,如果客戶連接到別的頁面,就會顯示沒有登錄,怎樣使客戶在主站上登錄了,就不用在論壇上登錄了

大體的想法是這樣的

關閉論壇的註冊功能,將phpbb 的login_box函數的重定向指定到主站上,這樣,只要提示用戶註冊或者登錄,用戶只能從zen-cart主站上進行

然後就是創建cookie和session的問題了

找到“zen-cart/includes/classes/class.phpbb.php"往該類增加三個函數

/**--二次開發--**/
	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
	}
	
	function get_userid_by_username($nick){//通過用戶名獲得用戶ID
		$sql="select `user_id` from ". $this->phpBB['users_table'] ." where `username`='".$nick."'";
		$result=$this->db_phpbb->Execute($sql);
		$user_id='';
		while (!$result->EOF) {
			$user_id=$result->fields['user_id'];
			$result->MoveNext();
      	}
		return $user_id;
	}
	
	function careate_session($username,$password){//產生一個phpBB的session
		if(!$username || !$password){
			return ;
			}
		$sessionIp='';
		$cookie_path='';
		$cookieName='';
		$session_id=$this->create_sess_id(32);
		$sql="select * from `".$this->phpBB['config_table']."` where `config_name` in ('cookie_domain','cookie_name','cookie_path')";
		//exit($sql);
		$result=$this->db_phpbb->Execute($sql);
		while (!$result->EOF) {
			if($result->fields['config_name']=='cookie_domain'){
				$sessionIp=$result->fields['config_value'];
				}
			if($result->fields['config_name']=='cookie_path'){
				$cookie_path=$result->fields['config_value'];
				}
			if($result->fields['config_name']=='cookie_name'){
				$cookieName=$result->fields['config_value'];
				}
			$result->MoveNext();
      	}
		//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->get_userid_by_username($cmd_username);
		//ob_clean();//清除輸出
		//zen_setcookie('cookie_test', 'please_accept_for_session', time()+60*60*24*30, '/', (zen_not_null($current_domain) ? $current_domain : ''));
		zen_setcookie($cookieName.'_u',$user_id,time()+100000000,'','',false);
		//往Cookies裏插入SessionID信息
		zen_setcookie($cookieName.'_sid',$session_id,time()+100000000,'','',false);
		//往phpb_sessions表中插入Session信息
		$session_table=$this->phpBB['table_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')";
		//exit($sqlcommand);
		$this->db_phpbb->Execute($sqlcommand);
		}

找到“zen-cart\includes\modules\pages\login\header.php”轉到大概97行

$zco_notifier->notify('NOTIFY_LOGIN_SUCCESS');

在這行上面添加如下代碼表示登錄時創建phpbb的Cookie和session

//二次開發,同步登錄
		if ($phpBB->phpBB['installed'] == true) {
			$phpBB->careate_session($email_address,$password);
			}
		//二次開發,同步登錄
注意這裏$email_address代表用戶名,我這裏把zen-cart改成只能用email登錄,所以用戶名就是eamil

找到“zen-cart\includes\modules\creat_account.php”在大概317行

// phpBB create account
    if ($phpBB->phpBB['installed'] == true) {
      $phpBB->phpbb_create_account($nick, $password, $email_address);
    }

內部加入以下代碼

 $phpBB->careate_session($nick,$password);//和phpbb共享登錄狀態
最後修改爲

// phpBB create account
    if ($phpBB->phpBB['installed'] == true) {
      $phpBB->phpbb_create_account($nick, $password, $email_address);
	  $phpBB->careate_session($nick,$password);//和phpbb共享登錄狀態
    }

這樣就可以了,祝你好運!


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章