phpbb3结合自己网站实现session登陆

来源:互联网 发布:淘宝版阿里旺旺下载 编辑:程序博客网 时间:2024/04/30 10:49

又是新的一年了,2013,在这里祝大家元旦快乐!!

正题,phpbb3是一个很不错的php论坛,界面也很不错,性能也好

但我想让它和我的网站整合在一起,用户数据完全就用论坛的数据,怎么弄呢

去谷歌搜了几天,发现都只有2010年和2007年的帖子,来自phpbb的官网

这个网址是:https://www.phpbb.com/kb/article/phpbb3-cross-site-sessions-integration/

其实说的也很明确了,只是本人初用phpbb,不太熟悉环境

这里只实现了登陆,却没有完成登陆,因为url缺少一个session id

即url上的sid=......

例如:http://localhost/phpBB3/index.php?sid=4de4ef4b260097b0ce6f0852908bd26d

当然也可以自己去动态生成一个sid,网上也有方法,但我没有测试过,等有时间再补上

后来又去找了下,找到一个比较靠谱的

http://www.freewebcomponent.com/sample/phpBB/Login/phpBB_Integration_in_our_own_website.html

但后来又发现竟然不需要密码直接登陆。。。囧了

由于代码比较简洁,就直接在他的基础上加入了密码验证


首先假设我们的根目录是   localhost/phpBB3/

文件名1:auth_ok.php   路径: localhost/phpBB3/includes/auth/

这个文件用于重载系统的一个函数:

文件内容如下:

<?phpfunction login_ok(&$username, &$password){global $db, $config;$sql = 'SELECT user_id, username, user_password, user_passchg, user_pass_convert, user_email, user_type, user_login_attemptsFROM ' . USERS_TABLE . "WHERE username_clean = '" . $db->sql_escape(utf8_clean_string($username)) . "'";$result = $db->sql_query($sql);$row = $db->sql_fetchrow($result);$db->sql_freeresult($result);return array('status'=> LOGIN_SUCCESS,'error_msg'=> false,'user_row'=> $row,);}?>

文件名2:class.phpBB.php 路径: localhost/phpBB3/includes/

这里是现实功能的主要文件,里面写了一个类,用于登陆和注册

文件内容如下:(这里对原作者的代码进行了部分修改)

<?php/*------------------------------------------------------------------------------------- Script Name: class.phpBB.php Script Version: 1.0 Author: Tony Wei ( tonywei123@gmail.com ) Blog: www.FreeWebComponent.com Description: phpBB operation Revision History:   1.0: original version 2010/4/18-------------------------------------------------------------------------------------*//*------------------------------------------------------------------------------------- Script Name: class.phpBB.php Script Version: 2.0 Author: Backgarden_Neo ( h20549304@gmail.com ) Blog: blog.csdn.net/backgarden_straw Description: phpBB operation of verification login Revision History:   1.0: original version 2010/4/18   2.0: first version 2013/1/1-------------------------------------------------------------------------------------*/// You may put phpBB directory name heredefine( "PHPBB_PATH", "phpBB3" );class phpBB {// -------------------------------------------------------------------------------------------------// Default constructor// -------------------------------------------------------------------------------------------------function phpBB(){    }// -------------------------------------------------------------------------------------------------// Login: Just pass username, than redirect to forum homepage// -------------------------------------------------------------------------------------------------function Login( $user_name,$user_password,$user_remember = true, $is_redirect = true ) {global $config, $user, $auth,$db;// do not allow empty passwordif (!$user_password){return array('status'=> LOGIN_ERROR_PASSWORD,'error_msg'=> 'NO_PASSWORD_SUPPLIED','user_row'=> array('user_id' => ANONYMOUS),);}if (!$user_name){return array('status'=> LOGIN_ERROR_USERNAME,'error_msg'=> 'LOGIN_ERROR_USERNAME','user_row'=> array('user_id' => ANONYMOUS),);}// Use login_ok function to override original login_db function in auth_db.php$config[ "auth_method" ] = "ok";// Start session management$user->session_begin();$auth->acl( $user->data );$user->setup( "ucp" );//进行一次选择,数据库里有的时候才进行登录$username_clean_name = utf8_clean_string($user_name);$username_clean_password = utf8_clean_string($user_password);$username_clean_remember = utf8_clean_string($$user_remember);$hash = phpbb_hash($username_clean_password);$sql = 'SELECT user_id,user_password FROM ' . USERS_TABLE . "WHERE username = '" .$user_name . "' ORDER BY user_id DESC LIMIT 1";$result = $db->sql_query($sql);$row = $db->sql_fetchrow($result);$db->sql_freeresult($result);if(phpbb_check_hash($username_clean_password,$row['user_password'])){$result = $auth->login( $user_name, $username_clean_password, $username_clean_remember, 1, 0 );$redirect = "/" . PHPBB_PATH . "/index.php";$redirect = reapply_sid( $redirect );header("Location:".$redirect);exit;}else{echo "your password is wrong,please check your passwrod!";}//}// -------------------------------------------------------------------------------------------------// Register: Create a new phpBB user// -------------------------------------------------------------------------------------------------function Register( $user_name, $user_password, $user_email ){echo $user_password;$user_row = array();$user_row["username"] = $user_name;$user_row["user_password"] = phpbb_hash( $user_password );$user_row["user_email"] = $user_email;$user_row["group_id"] = "2";$user_row["user_timezone"] = "8";// You may change default timezone here$user_row["user_dst"] = "0";$user_row["user_lang"] = "zh_cmn_hant";// You may change default language here$user_row["user_type"] = "0";$user_row["user_actkey"] = "";$user_row["user_ip"] = $_SERVER["REMOTE_ADDR"];$user_row["user_regdate"] = time();$user_row["user_inactive_reason"] = "0";$user_row["user_inactive_time"] = "0";$user_row["user_new"] = "1";$user_id = user_add( $user_row, array() );echo "   ".$user_row["user_password"];}} // End of class phpBB?>

文件名3:login_session.php  路径   localhost/phpBB3/testphpbb/session/

文件内容如下:

<?phprequire_once("../phpbb.php");require_once( "../../includes/class.phpBB.php");$phpBB = new phpBB();$return_value = $phpBB->Login( "your name","your password");?>

文件名4:phpbb.php  路径: localhost/phpBB3/testphpbb/

这个phpbb.php主要用于完成环境变量和一些头文件的引用

主要内容如下:

<?phpdefine('ROOT_PATH', "../");   // map this dir to your own installation of phpbbdefine('IN_PHPBB', true);if (!defined('IN_PHPBB') || !defined('ROOT_PATH')) exit();$phpEx = "php";$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : ROOT_PATH . '../';include($phpbb_root_path . 'common.' . $phpEx);include($phpbb_root_path . 'config.' . $phpEx);include($phpbb_root_path . 'includes/functions_display.' . $phpEx);require_once( $phpbb_root_path . "includes/functions." . $phpEx );require_once( $phpbb_root_path . "includes/functions_user." . $phpEx );require_once( $phpbb_root_path . "includes/functions_module." . $phpEx );$user->session_begin();$auth->acl($user->data);$user->setup();$user->setup('viewforum');?>

文件名5:register_demo.php  路径: localhost/phpBB3/testphpbb/session/

文件内容如下:

<?require_once("../phpbb.php");require_once( "../../includes/class.phpBB.php");$phpBB = new phpBB();$phpBB->Register( "your name", "your password", "your email" );print "Register success!";?>


这里只是实现了功能,至于具体怎么完成结合就需要自己考虑了,结合上之前获取帖子的功能

后面还要加入语法插件,syntax highlight的加入,当然有需要就再找,会陆续写文章的


ps:祝大家,元旦快乐~~




原创粉丝点击