phpBB Usersystem in eigener Seite nutzen



  • Hm, also Hife wäre wirklich sehr schön, ich bekomm das nicht wirklich hin. Ich weiß erstmal nur, dass im Auth-Cookie die letzte SessionID gespeichert ist und beim starten des Forum diese ausgelesen wird und der User eine neue Session zugewiesen bekommt mit seinen Benutzerdaten drin, mit der er dann durchs Forum surft. Wie das genau abläuft weiß ich auch noch nicht, der Code vom phpBB ist so schrecklich modular, für die Lösung müsste man mindestens 4 - 5 extrem große Dateien durchackern. Hilfe wäre wirklich sehr willkommen 🙂



  • schau mal auf www.phpbb.de
    sehr gutes Hilfe-Forum für phpBB



  • Hab ich natürlich schon gemacht, bin jetzt dem Problem etwas näher gekommen. Also phpBB identifiziert den Benutzer auf jeder Seite neu, entweder über SessionID oder Cookies. Einfach in der Session.php nachschauen. Der Code ist etwas unübersichtlich, aber ich habe es schon fast gelöst 🙂



  • benutze doch einfach den code

    <?
    define('IN_PHPBB', true);
    $phpbb_root_path = './';
    include($phpbb_root_path . 'extension.inc');
    include($phpbb_root_path . 'common.'.$phpEx);
    
    $userdata = session_pagestart($user_ip, PAGE_INDEX);
    init_userprefs($userdata);
    
    if ( $userdata['user_id'] != -1 )
          echo($userdata['username']);
    
    ?>
    


  • Michamba, wenn du es gelöst hast, sag bescheid ok?

    soweit war ich auch schon *gg*
    aber ich war scheinbar zu blöd *lol*

    cya



  • Ne, leider ist das nicht so simpel wie von Dimah dargestellt, phpBB vollzieht in diesen Dateien leider ein paar Schritte, die ich nicht auf meiner Seite haben will, mitunter gibt es auch schon ausgaben und dann diese ganze Sache mit dem Bannen, das soll alles nicht mit der Seite zu tun haben, ich will bloß die reinen Benutzerdaten haben. Ich habe schon fast eine fertige Lösung, aber leider funzt es noch nicht richtig, hier mal der Code, vielleicht fallen ja jemanden Fehler auf (hab aber keinen Bock das alles zu extrahieren, also so wie auf meiner Seite hier):

    <?
    
    // Datei: include/config.inc.php
    // Enthält Konfigurationsdaten für meine Seite und phpBB
    
    $host = "xxx";
    $name = "xxx";
    $passwort = "xxx";
    ...
    $phpbb_database = "forum";
    $phpbb_prefix = "phpbb_";
    
    ?>
    
    <?
    
    // Datei: include/functions.inc.php
    // Enthält alle wichtigen Funktionen
    
    function get_ip()
    {
    // Holt sich die IP des Users
            if( getenv('HTTP_X_FORWARDED_FOR') != '' )
            {
                    $client_ip = ( !empty($HTTP_SERVER_VARS['REMOTE_ADDR']) ) ? $HTTP_SERVER_VARS['REMOTE_ADDR'] : ( ( !empty($HTTP_ENV_VARS['REMOTE_ADDR']) ) ? $HTTP_ENV_VARS['REMOTE_ADDR'] : $REMOTE_ADDR );
    
                    $entries = explode(',', getenv('HTTP_X_FORWARDED_FOR'));
                    reset($entries);
                    while (list(, $entry) = each($entries))
                    {
                            $entry = trim($entry);
                            if ( preg_match("/^([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)/", $entry, $ip_list) )
                            {
                                    $private_ip = array('/^0\./', '/^127\.0\.0\.1/', '/^192\.168\..*/', '/^172\.((1[6-9])|(2[0-9])|(3[0-1]))\..*/', '/^10\..*/', '/^224\..*/', '/^240\..*/');
                                    $found_ip = preg_replace($private_ip, $client_ip, $ip_list[1]);
    
                                    if ($client_ip != $found_ip)
                                    {
                                    $client_ip = $found_ip;
                                    break;
                                    }
                            }
                    }
            }
            else
            {
                    $client_ip = ( !empty($HTTP_SERVER_VARS['REMOTE_ADDR']) ) ? $HTTP_SERVER_VARS['REMOTE_ADDR'] : ( ( !empty($HTTP_ENV_VARS['REMOTE_ADDR']) ) ? $HTTP_ENV_VARS['REMOTE_ADDR'] : $REMOTE_ADDR );
            }
            $ip_sep = explode('.', $client_ip);
            return sprintf('%02x%02x%02x%02x', $ip_sep[0], $ip_sep[1], $ip_sep[2], $ip_sep[3]);
    }
    
    function db_conn($db = "sw")
    {
    // Stellt eine Datenbankverbindung her, je nach Parameter
            global $host, $name, $passwort, $phpbb_database, ...;
    
            if($db == "sw")
            {
    // Verbindung mit der Datenbank meiner Seite
            }
            else if($db == "phpbb")
            {
                    if(!$link = mysql_connect($host, $name, $passwort))
                    {
                            message("Keine Datenbankverbindung möglich !","red");
                    }
                    if(!mysql_select_db($phpbb_database))
                    {
                            message("Auswahl der Datenbank fehlgeschlagen !","red");
                    }
            }
            else
            {
                    message("Parameter f&uuml; Datenbankauswahl ist fehlerhaft !","red");
            }
    }
    
    function get_phpbb_config()
    {
            global $phpbb_prefix;
            $board_config = array();
            db_conn("phpbb");
            $result = mysql_query("SELECT * FROM " . $phpbb_prefix . "config");
            if(!$result)
            {
                    message("Konnte Konfigurationsdaten von phpBB nicht laden","red");
            }
    
            while ($row = mysql_fetch_array($result))
            {
                    $board_config[$row['config_name']] = $row['config_value'];
            }
            return $board_config;
    }
    
    function session_init($user_id, $user_ip, $page_id, $auto_create = 0, $enable_autologin = 0)
    {
            global $phpbb_prefix, $cookiename, $cookiepath, $cookiedomain, $cookiesecure, $HTTP_COOKIE_VARS;
            if(isset($HTTP_COOKIE_VARS[$cookiename . '_sid']) || isset($HTTP_COOKIE_VARS[$cookiename . '_data']) )
            {
                    $session_id = isset($HTTP_COOKIE_VARS[$cookiename . '_sid']) ? $HTTP_COOKIE_VARS[$cookiename . '_sid'] : '';
                    $sessiondata = isset($HTTP_COOKIE_VARS[$cookiename . '_data']) ? unserialize(stripslashes($HTTP_COOKIE_VARS[$cookiename . '_data'])) : array();
                    $sessionmethod = SESSION_METHOD_COOKIE;
            }
            else
            {
                    $sessiondata = array();
                    $session_id = ( isset($HTTP_GET_VARS['sid']) ) ? $HTTP_GET_VARS['sid'] : '';
                    $sessionmethod = SESSION_METHOD_GET;
            }
    
            $current_time = time();
            $expiry_time = $current_time - $board_config['session_length'];
    
            $result = mysql_query("SELECT * FROM " . $phpbb_prefix . "users WHERE user_id = '" . $user_id . "'");
            if(!$result)
            {
                    message("Konnte keine Verbindung zur Benutzerdatenbank herstellen","red");
            }
    
            $userdata = mysql_fetch_array($result);
    
            if ($user_id != ANONYMOUS)
            {
                    $auto_login_key = $userdata['user_password'];
                    if($auto_create)
                    {
                            if(isset($sessiondata['autologinid']) && $userdata['user_active'] )
                            {
                                    // Automatischer Login
                                    if($sessiondata['autologinid'] == $auto_login_key)
                                    {
                                            // Auto-LoginID matches password
                                            $login = 1;
                                            $enable_autologin = 1;
                                    }
                                    else
                                    {
                                            // No match; don't login, set as anonymous user
                                            $login = 0;
                                            $enable_autologin = 0;
                                            $user_id = $userdata['user_id'] = ANONYMOUS;
                                    }
                            }
                            else
                            {
                                    // AutoLogin ist nicht gesetzt. Kein Login, als ANONYMOUS setzten
                                    $login = 0;
                                    $enable_autologin = 0;
                                    $user_id = $userdata['user_id'] = ANONYMOUS;
                            }
                    }
                    else
                    {
                            $login = 1;
                    }
            }
            else
            {
                    $login = 0;
                    $enable_autologin = 0;
            }
    
            $query = "UPDATE " . $phpbb_prefix . "sessions SET session_user_id = '" . $user_id . "', session_start = $current_time, session_time = $current_time, session_page = $page_id, session_logged_in = $login WHERE session_id = '" . $session_id . "' AND session_ip = '$user_ip'";
            if(!mysql_query($query) || !mysql_affected_rows())
            {
                    $session_id = md5(uniqid($user_ip));
                    $result = mysql_query("INSERT INTO " . $phpbb_prefix . "sessions (session_id, session_user_id, session_start, session_time, session_ip, session_page, session_logged_in) VALUES ('$session_id', '$user_id', $current_time, $current_time, '$user_ip', $page_id, $login)");
                    if(!$result)
                    {
                            message("Fehler beim Anlegen der Session - " . mysql_errno() . ": " . mysql_error() . "\n","red");
                    }
            }
    
            if ($user_id != ANONYMOUS )
            {
                    $sessiondata['autologinid'] = ($enable_autologin && $sessionmethod == SESSION_METHOD_COOKIE) ? $auto_login_key : '';
                    $sessiondata['userid'] = $user_id;
            }
    
            $userdata['session_id'] = $session_id;
            $userdata['session_ip'] = $user_ip;
            $userdata['session_user_id'] = $user_id;
            $userdata['session_logged_in'] = $login;
            $userdata['session_page'] = $page_id;
            $userdata['session_start'] = $current_time;
            $userdata['session_time'] = $current_time;
    
            setcookie($cookiename . '_data', serialize($sessiondata), $current_time + 31536000, $cookiepath, $cookiedomain, $cookiesecure);
            setcookie($cookiename . '_sid', $session_id, 0, $cookiepath, $cookiedomain, $cookiesecure);
    
            $SID = 'sid=' . $session_id;
    
            return $userdata;
    }
    
    function message(...)
    {
    // Ausgabe von Nachrichten und Fehlermeldungen
    }
    
    ?>
    


  • <?
    
    // Datei: include/common.inc.php
    // Identifiziert den Benutzer und macht einige andere Sachen
    
    // Hier erstmal ein paar Sachen für meine Seiten, z.B. checken ob der 
    // Installationsordner noch besteht usw.
    ...
    
    $board_config = get_phpbb_config();
    $userdata = array();
    $user_ip = get_ip();
    
    $cookiename = $board_config['cookie_name'];
    $cookiepath = $board_config['cookie_path'];
    $cookiedomain = $board_config['cookie_domain'];
    $cookiesecure = $board_config['cookie_secure'];
    
    $current_time = time();
    unset($userdata);
    
    if (isset($HTTP_COOKIE_VARS[$cookiename . '_sid']) || isset($HTTP_COOKIE_VARS[$cookiename . '_data']) )
    {
            $sessiondata = isset($HTTP_COOKIE_VARS[$cookiename . '_data']) ? unserialize(stripslashes($HTTP_COOKIE_VARS[$cookiename . '_data'])) : array();
            $session_id = isset($HTTP_COOKIE_VARS[$cookiename . '_sid']) ? $HTTP_COOKIE_VARS[$cookiename . '_sid'] : '';
            $sessionmethod = SESSION_METHOD_COOKIE;
    }
    else
    {
            $sessiondata = array();
            $session_id = (isset($HTTP_GET_VARS['sid'])) ? $HTTP_GET_VARS['sid'] : '';
            $sessionmethod = SESSION_METHOD_GET;
    }
    
    if(!empty($session_id))
    {
            // Session existiert, Benutzerdaten holen
            $result = mysql_query("SELECT u.*, s.* FROM " . $phpbb_prefix . "sessions s, " . $phpbb_prefix . "users u WHERE s.session_id = '$session_id' AND u.user_id = s.session_user_id");
            if(!$result)
            {
            message("Konnte Benutzerdaten nicht aus der Datenbank holen","red");
            }
    
            $userdata = mysql_fetch_array($result);
    
            if(isset($userdata['user_id']))
            {
                    $ip_check_s = substr($userdata['session_ip'], 0, 6);
                    $ip_check_u = substr($user_ip, 0, 6);
                    if ($ip_check_s == $ip_check_u)
                    {
                            $SID = ($sessionmethod == SESSION_METHOD_GET) ? 'sid=' . $session_id : '';
                            if ( $current_time - $userdata['session_time'] > 60 )
                            {
                                    $result = mysql_query("UPDATE " . $phpbb_prefix . "sessions SET session_time = $current_time, session_page = 0 WHERE session_id = '" . $userdata['session_id'] . "'");
                                    if(!$result)
                                    {
                                            message("Fehler beim updaten der Session-Tabelle","red");
                                    }
                                    if ($userdata['user_id'] != ANONYMOUS )
                                    {
                                            $result = mysql_query("UPDATE " . $phpbb_prefix . "users SET user_session_time = $current_time, user_session_page = 0 WHERE user_id = " . $userdata['user_id']);
                                            if(!$result)
                                            {
                                                    message("Fehler beim updaten der Session-Tabelle","red");
                                            }
                                    }
    
                                    $expiry_time = $current_time - $board_config['session_length'];
                                    $result = mysql_query("DELETE FROM " . $phpbb_prefix . "sessions WHERE session_time < $expiry_time AND session_id <> '$session_id'");
    
                                    if(!$result)
                                    {
                                            message("Fehler beim L&ouml;schen in der Session-Tabelle","red");
                                    }
    
                                    setcookie($cookiename . '_data', serialize($sessiondata), $current_time + 31536000, $cookiepath, $cookiedomain, $cookiesecure);
                                    setcookie($cookiename . '_sid', $session_id, 0, $cookiepath, $cookiedomain, $cookiesecure);
                            }
    		}
    	}
    }
    
    $user_id = (isset($sessiondata['userid']) ) ? intval($sessiondata['userid']) : ANONYMOUS;
    if(!($userdata = session_init($user_id, $user_ip, 0, TRUE)) )
    {
    	message("Fehler beim Anlegen der Session","red");
    }
    
    // $userdata nun verhanden
    // User identifiziert
    
    if($userdata["session_logged_in"])
    {
    echo($userdata["username"]);
    }
    
    ...
    
    ?>
    

    Eingebunden wird das ganze dann so, hier z.B. eine Beispielseite:

    <?
    
    ...
    
    include("include/config.inc.php");
    include("include/functions.inc.php");
    include("include/common.inc.php");
    
    // Ausgabe des Contents
    ... 
    
    ?>
    


  • Inwiefern funktioniert es denn nicht wie gewünscht? 🙄



  • Also im Forum bin ich angemeldet wie gewünscht mit Auologin, hier die Ausgabe von Userdata:

    0: 2
    user_id: 2
    1: 1
    user_active: 1
    2: mab
    username: mab
    3: 4dfe6a0876758f70e6279f8d8c2efcde
    user_password: 4dfe6a0876758f70e6279f8d8c2efcde
    4: 1066043389
    user_session_time: 1066043389
    5: 0
    user_session_page: 0
    6: 1066042997
    user_lastvisit: 1066043389
    7: 1066042969
    user_regdate: 1066042969
    8: 1
    user_level: 1
    9: 1

    Wenn ich nun in der Seite mir Userdata ausgeben lasse kommt folgendes:

    0: 2
    user_id: ANONYMOUS
    1: 1
    user_active: 1
    2: mab
    username: mab
    3: 4dfe6a0876758f70e6279f8d8c2efcde
    user_password: 4dfe6a0876758f70e6279f8d8c2efcde
    4: 1066044649
    user_session_time: 1066044649
    5: 0
    user_session_page: 0
    6: 1066044638
    user_lastvisit: 1066044638
    7: 1066042969
    user_regdate: 1066042969
    8: 1
    user_level: 1
    9: 1
    ...
    session_id: 4af2da35be34dc9013c30d8a57275aba
    session_ip: 00000000
    session_user_id: ANONYMOUS
    session_logged_in: 0
    session_page: 0
    session_start: 1066044655
    session_time: 1066044655

    Keine Ahnung warum das so ist, sehe das Problem einfach nicht, aber der Fehler muß wohl daran liegen, dass er $sessiondata['autologinid']) in der Seite nicht hat. Aber keine Ahnung waran das liegt 😕



  • Was steht denn in $cookiedomain bzw. $board_config['cookie_domain']´? Evtl. ist das Cookie nämlich im Stammordner einfach nur nicht mehr gültig



  • Hm, Cookiepath hat einfach nur den Wer "/". Auf meinem Server ist das Forum in einem Unterverzichnis namens ./forum/. Aber ich habe mir gerade die Cookievariablen nochmal ausgeben lassen und folgendes bekommen:

    SessionID: 64855d3ff2677c168f841239b7b5ec45
    Sessiondata: autologinid: 4dfe6a0876758f70e6279f8d8c2efcde
    Sessiondata: userid: 2

    Also sieht erstmal richtig aus, doch wenn ich dann den Code weiterlaufen lasse bin ich trotzdem als ANONYMOUS gesetzt 😕
    Langsam verlier ich hier meinen Verstand 😞



  • Also ich hab mir nochmal den Code genau angesehen und der Fehler liegt irgendwo in der Funktion session_init(). Dort habe ich vergessen die Variablen $cookiename usw. als global zu deklarieren, aber das hilft auch nicht weiter. Folgende Zeile wird als FALSE zurückgegeben, obwohl $cookiename usw gegeben sind und die Cookies in der common.inc.php korrekt identifiziert werden:

    if (isset(HTTP\_COOKIE\_VARS[cookiename . '_sid']) || isset(HTTP\_COOKIE\_VARS[cookiename . '_data']) )



  • Ich habe mal ein paar Statusausgaben eingefügt und das Ergebnis ist eindeutig:

    Common: Session_id aus Cookies: 5302caefb7961ac63985e3114ddd8947
    Common: Userdata aus der Datenbank anhand der Cookies: 2
    Common: IP-Check: 7f0000 == 000000 ???
    Common: Session_init wird aufgerufen mit $user_id = 2

    Session_init: Start der Funktion session_init()

    Session_init: $cookiename ist gegeben: phpbb2mysql
    Session_init: Cookies nicht vorhanden und Veriablen sind leer
    Session_init: Session_ID folglich aus Cookies:
    Session_init: User_id ist nicht ANONYMOUS, da korrekt aus Common übergeben: 2
    Session_init: $auto_create = 1
    Session_init: Sessiondata[autologinid] nicht vorhanden oder Account nicht aktiviert - User_id wird ANONYMOUS gesetzt
    Session_init: Neue Session soll angelegt werden für folgende User_id: ANONYMOUS

    Warning: Cannot add header information - headers already sent by (output started at d:\homepage\aktuell\ski-world\include\common.inc.php:33) in d:\homepage\aktuell\ski-world\include\functions.inc.php on line 191

    Warning: Cannot add header information - headers already sent by (output started at d:\homepage\aktuell\ski-world\include\common.inc.php:33) in d:\homepage\aktuell\ski-world\include\functions.inc.php on line 192

    Session_init: Cookies werden gesetzt (phpbb2mysql_data und phpbb2mysql_sid) mit $sessiondata und $session_id
    Session_init: $userdata wird zurückgegeben an common.inc.php
    Common: Session_init wurde aufgerufen und Userdata sollte nun vorhanden sein:

    0: 2
    user_id: ANONYMOUS
    1: 1
    user_active: 1
    2: mab
    username: mab
    3: 4dfe6a0876758f70e6279f8d8c2efcde
    user_password: 4dfe6a0876758f70e6279f8d8c2efcde
    4: 1066051051

    Irgendwie kann er die Cookies in der Session_init nicht mehr lesen, keine Ahnung warum, hat jemand ne Ahnung, ich sehe absolut keinen Fehler 😮



  • global $HTTP_COOKIE_VARS;
    

    $HTTP_COOKIE_VARS ist nämlich im Gegensatz zu $_COOKIE (ab PHP >= 4.1.0 vorhanden) nicht autoglobal 😉



  • Juhhhhhhhhhuuuuuu 🙂 🙂 🙂
    Es funktioniert, danke flenders mein Retter. Und der ganze Rummel nur wegen soner Kleinigkeit 🙄

    @MrChat: Ich habe jetzt übrigens den Code hier im Thread so editiert, dass er funktioniert 😉



  • thx thx 🙂

    ich werd es mal testen *gg*

    cya



  • hmm also ich schlag mich grade damit rum, weil ich es jetz eigentlich für die site auch gebrauchen könnte 😞

    leider raff ich das ganz und gar net...
    also einloggen tu ich mich per dieser login.php von phpBB..
    d.h. ich übergene dieser Datei die parameter username und password..

    allerdings soll er mich jetz nit direkt auf die phpbb - seite umleiten sondern wieder auf die hauptseite..

    und dann muss ich ja die userdaten auslesen können..
    mehr will ich ja nicht 😞

    aber ich bin scheinbar zu blöd dazu *heul*

    cya



  • Also ich habe mir eigentlich alles selber geschrieben, bringt ein paar Vorteile, so verzichte ich auf viel unnützen Code den ich auf der Seite im Gegensatz zum Forum sowieso nicht brauche. Aber der Login ist ja garnicht mal so das Thema, den kann man immer noch machen, wichtig ist das du in jeder Seite deiner HP den User erst identifizierst, ich habe dafür 3 Dateien gewählt wie gesagt, eine Datei mit den wichtigen Variablen (phpBB-Prefix, Datenbankverbindungen, usw.), eine Datei in der alle wichtigen Funktionen enthalten sind (also z.B. Konfigurationsdaten des Forum auslesen) und dann noch die Common.inc.php in der der Benutzer identifiziert wird. Alle 3 Dateien werden in jede Seite eingebunden. Im Grunde genommen brauchst du dir bloß meinen Code ein wenig umschreiben und in dir zurechtlegen, man kann das alles auch in einer Datei erledigen. Falls du konkrete Hilfe brauchst sag es, bei mir funktioniert jetzt alles perfekt 🙂



  • also sind die drei dateien, die du hier angegeben hast NICHT die, die auch das forum benützt, sondern die, die du dir selber zurecht geschrieben hast...
    d.h. ich copy & paste mir die in meine funktions.inc.php / definitions.inc.php etc... und dann überall einbinden...

    jetz wird mir das klarer *gg*

    ausprobiern 🙂

    cya



  • *grml*

    geht net..

    ich bin scheinbar wirklich minderbemittelt *gg*

    na ja.. mal weiter suchen + probiern..

    cya


Anmelden zum Antworten