Zen-cart整合phpBB同步登录

http://blog.csdn.net/painsonline/article/details/8064937


[php]  view plain copy
  1. <span style="font-size:18px;"$phpBB->careate_session($nick,$password);//和phpbb共享登录状态</span>  

这几天在公司里面搞zen-cart,要求zen-cart商城和论坛能够同步注册和登录,其实同步注册修改个人信息zen-cart已经整合了,就是同步登录的问题没有,到网上找了一下,都是说搞一个新的页面,个人觉得不好,如果客户连接到别的页面,就会显示没有登录,怎样使客户在主站上登录了,就不用在论坛上登录了

大体的想法是这样的

关闭论坛的注册功能,将phpbb 的login_box函数的重定向指定到主站上,这样,只要提示用户注册或者登录,用户只能从zen-cart主站上进行

然后就是创建cookie和session的问题了

找到“zen-cart/includes/classes/class.phpbb.php"往该类增加三个函数

[php]  view plain copy
  1. <span style="font-size:18px;">/**--二次开发--**/  
  2.     function create_sess_id($len=32){//产生一个session_id  
  3.         list($u$s) = explode(' ', microtime());  
  4.         $time = (float)$u + (float)$s;// 获取当前时间的微秒  
  5.         $rand_num = rand(100000, 999999);  
  6.         $rand_num = rand($rand_num$time);  
  7.         mt_srand($rand_num);  
  8.         $rand_num = mt_rand();// 产生一个随机数  
  9.         $sess_id = md5( md5($time). md5($rand_num) );// 产生SessionID  
  10.         $sess_id = substr($sess_id, 0, $len);  
  11.         return $sess_id;// 截取指定需要长度的SessionID  
  12.     }  
  13.       
  14.     function get_userid_by_username($nick){//通过用户名获得用户ID  
  15.         $sql="select `user_id` from "$this->phpBB['users_table'] ." where `username`='".$nick."'";  
  16.         $result=$this->db_phpbb->Execute($sql);  
  17.         $user_id='';  
  18.         while (!$result->EOF) {  
  19.             $user_id=$result->fields['user_id'];  
  20.             $result->MoveNext();  
  21.         }  
  22.         return $user_id;  
  23.     }  
  24.       
  25.     function careate_session($username,$password){//产生一个phpBB的session  
  26.         if(!$username || !$password){  
  27.             return ;  
  28.             }  
  29.         $sessionIp='';  
  30.         $cookie_path='';  
  31.         $cookieName='';  
  32.         $session_id=$this->create_sess_id(32);  
  33.         $sql="select * from `".$this->phpBB['config_table']."` where `config_name` in ('cookie_domain','cookie_name','cookie_path')";  
  34.         //exit($sql);  
  35.         $result=$this->db_phpbb->Execute($sql);  
  36.         while (!$result->EOF) {  
  37.             if($result->fields['config_name']=='cookie_domain'){  
  38.                 $sessionIp=$result->fields['config_value'];  
  39.                 }  
  40.             if($result->fields['config_name']=='cookie_path'){  
  41.                 $cookie_path=$result->fields['config_value'];  
  42.                 }  
  43.             if($result->fields['config_name']=='cookie_name'){  
  44.                 $cookieName=$result->fields['config_value'];  
  45.                 }  
  46.             $result->MoveNext();  
  47.         }  
  48.         //exit($cookieName.'--'.$sessionIp.'--'.$cookie_path);  
  49.         $userBrowserInfo$_SERVER["HTTP_USER_AGENT"];  
  50.         $userIpAdd=empty($_SERVER["HTTP_CLIENT_IP"])?'127.0.0.1':$_SERVER["HTTP_CLIENT_IP"];  
  51.         $cmd_username=$username;  
  52.         $user_id=$this->get_userid_by_username($cmd_username);  
  53.         //ob_clean();//清除输出  
  54.         //zen_setcookie('cookie_test', 'please_accept_for_session', time()+60*60*24*30, '/', (zen_not_null($current_domain) ? $current_domain : ''));  
  55.         zen_setcookie($cookieName.'_u',$user_id,time()+100000000,'','',false);  
  56.         //往Cookies里插入SessionID信息  
  57.         zen_setcookie($cookieName.'_sid',$session_id,time()+100000000,'','',false);  
  58.         //往phpb_sessions表中插入Session信息  
  59.         $session_table=$this->phpBB['table_prefix'].'sessions';  
  60.         $sqlcommand="insert into ".$session_table."(session_id,session_user_id,session_last_visit,session_start,session_time,session_ip,session_browser,session_page)";  
  61.         $sqlcommand.=" values('$session_id',$user_id,'".time()."','".time()."','".time()."','$userIpAdd','$userBrowserInfo','index.php')";  
  62.         //exit($sqlcommand);  
  63.         $this->db_phpbb->Execute($sqlcommand);  
  64.         }</span>  

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

[php]  view plain copy
  1. <span style="font-size:18px;">$zco_notifier->notify('NOTIFY_LOGIN_SUCCESS');</span>  

在这行上面添加如下代码表示登录时创建phpbb的Cookie和session

[php]  view plain copy
  1. <span style="font-size:18px;">//二次开发,同步登录  
  2.         if ($phpBB->phpBB['installed'] == true) {  
  3.             $phpBB->careate_session($email_address,$password);  
  4.             }  
  5.         //二次开发,同步登录</span>  
注意这里$email_address代表用户名,我这里把zen-cart改成只能用email登录,所以用户名就是eamil

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

[php]  view plain copy
  1. <span style="font-size:18px;">// phpBB create account  
  2.     if ($phpBB->phpBB['installed'] == true) {  
  3.       $phpBB->phpbb_create_account($nick$password$email_address);  
  4.     }</span>  

内部加入以下代码

[php]  view plain copy
  1. <span style="font-size:18px;"$phpBB->careate_session($nick,$password);//和phpbb共享登录状态</span>  
最后修改为

[php]  view plain copy
  1. <span style="font-size:18px;">// phpBB create account  
  2.     if ($phpBB->phpBB['installed'] == true) {  
  3.       $phpBB->phpbb_create_account($nick$password$email_address);  
  4.       $phpBB->careate_session($nick,$password);//和phpbb共享登录状态  
  5.     }</span>  

这样就可以了,祝你好运!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值