现在的位置: 首页 > 综合 > 正文

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

2017年12月01日 ⁄ 综合 ⁄ 共 6160字 ⁄ 字号 评论关闭

又是新的一年了,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/

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

文件内容如下:

<?php

function 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_attempts
		FROM ' . 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 here
define( "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 password
		if (!$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/

文件内容如下:

<?php

require_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主要用于完成环境变量和一些头文件的引用

主要内容如下:

<?php
define('ROOT_PATH', "../");   // map this dir to your own installation of phpbb

define('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:祝大家,元旦快乐~~


抱歉!评论已关闭.