Eigenen Login verwenden, welche Session Vars muss ich setzen
- Blutgerinsel
- Mitglied
- Beiträge: 1801
- Registriert: 19.07.2004 18:53
- Wohnort: Landkreis Ulm
- Kontaktdaten:
Die Variante von Blutgerinsel wirkt auf den ersten Blick ganz einfach, jedoch was ist wenn Cookies ausgeschaltet sind?
Greift da ein Fallback wenn ja wie geht’s dann weiter??
Das große Problem ist bei: Baue ins PHPBB neue Session Logik ein wenn von HTTP Session empfangen erstelle diese Session ansonsten erstelle selber eine eigene. Gute Idee, dachten sich wohl auch die Leute von PostNuke, die habens so ähnlich gemacht und bei denen heißt jetzt phpBB, mod phpBB und das nicht ohne Grund. Ein Blick in die Sessionverwaltung von phpBB dürfte jeden Coder abschrecken der ne einfache Lösung sucht, die Session von phpBB umzubauen ist zwar möglich, aber ein erheblicher Aufwand der in keinem Verhältnis zum Nutzen steht.
2 Sessions,
Wenn man sich die Funktionen der Sessionverwaltung von phpBB ansieht kommt man zu 3 Schlüssen. Die wollen verhindern das man sich da einklinkt, die ist sicher (id entführen bringt nichts), Sie haben gewusst, dass schon eine session laufen könnte wenn das Forum aufgerufen wird. Nicht umsonst verschlüsseln Sie die IP und ihre Session id aus ner Kombination zwischen Ip und Session_id. Desweitern speichern Sie die Session in der DB so einen Aufwand betreibt man nur wenn man davon ausgeht das andere Session Aktiv sein könnten und natürlich der Sicherheit wegen. PhpBB ist drauf ausgelegt in einer Umgebung zu laufen in der schon eine andere Session Aktiv ist.
Also es spricht nichts dagegen und an die Daten kommt man über die User_id auch ran.
Es ist sicherer da die Kernfunktionen von phpBB nicht verändert werden.
Updatefreundlicher.
Man stelle sich nur vor man müsste nach jedem Update das ganze noch mal umschreiben.
Greift da ein Fallback wenn ja wie geht’s dann weiter??
Nun phpBB arbeitet mit pageopen Funktionen und verschlüsselt die Daten, die Session wird nach jeden Seitenabruf wieder geschlossen. Kann man genauso machen vielleicht auch einfacher.Blutgerinsel hat geschrieben:Das ist blödsinnig mit einer zweiten Session.....
Genau ist es unmöglich was vernünftiges zu machen ohne am Quelltext rumzuspielen des Boardes.....
Howto Do:
Datenabgleich:
-> Forumregistration, User löschen -> Pflege der UM-Table
AutoLogin: (via UM)
-> Setze PHPBB Cookie
-> Lese PHPBB Cookie
Login: (via UM)
-> Stimme UM Session auf Rules von PHPBB ab
-> Fülle UM Session Table
-> Fülle PHPBB Session Table
-> Übergebe SESSION via HTTP POST an das Forum auch zweites Fenster denkbar
-> Baue ins PHPBB neue Session Logik ein wenn von HTTP Session empfangen erstelle diese Session ansonsten erstelle selber eine eigene
Dadurch sind immer noch wenn gewünscht unabhängige Logins möglich....
Ausloggen: (via UM)
-> Lösche PHPBB Cookie
-> Setze UM Session Table Status logout (bei mir Sessiontime NULL)
-> Setze PHPBB Session Table Status logout (Ablauf noch unklar, da keine Zeit)
Via Forumseite entsprechend auch....
Das große Problem ist bei: Baue ins PHPBB neue Session Logik ein wenn von HTTP Session empfangen erstelle diese Session ansonsten erstelle selber eine eigene. Gute Idee, dachten sich wohl auch die Leute von PostNuke, die habens so ähnlich gemacht und bei denen heißt jetzt phpBB, mod phpBB und das nicht ohne Grund. Ein Blick in die Sessionverwaltung von phpBB dürfte jeden Coder abschrecken der ne einfache Lösung sucht, die Session von phpBB umzubauen ist zwar möglich, aber ein erheblicher Aufwand der in keinem Verhältnis zum Nutzen steht.
2 Sessions,
Wenn man sich die Funktionen der Sessionverwaltung von phpBB ansieht kommt man zu 3 Schlüssen. Die wollen verhindern das man sich da einklinkt, die ist sicher (id entführen bringt nichts), Sie haben gewusst, dass schon eine session laufen könnte wenn das Forum aufgerufen wird. Nicht umsonst verschlüsseln Sie die IP und ihre Session id aus ner Kombination zwischen Ip und Session_id. Desweitern speichern Sie die Session in der DB so einen Aufwand betreibt man nur wenn man davon ausgeht das andere Session Aktiv sein könnten und natürlich der Sicherheit wegen. PhpBB ist drauf ausgelegt in einer Umgebung zu laufen in der schon eine andere Session Aktiv ist.
Also es spricht nichts dagegen und an die Daten kommt man über die User_id auch ran.
Es ist sicherer da die Kernfunktionen von phpBB nicht verändert werden.
Updatefreundlicher.
Man stelle sich nur vor man müsste nach jedem Update das ganze noch mal umschreiben.
Re: Login im phpbb von eigener Benutzverwaltung/Portal
Also zur Klasse.mephiztophelez hat geschrieben: Das hat dann auch auf Anhieb super funktioniert, jedoch hatte ich bis heute Probleme mit dem Autologin. Ich konnte das vorerst nur durch eine Manipulation an der phpBB2/includes/sessions.php beheben, was aber auch noch nicht das gelbe vom Ei ist.
Meine modifizierte phpbblogin.php sieht jetzt so aus:Zu beachten ist, dass ich bevor ich die Klasse eingebunden habe, schon eine Datenbankverbindung hergestellt habe, denn die muss ja wärend desCode: Alles auswählen
<?php /* * PHPBB_Login allows you to integrate your own login system * with phpBB. Meaning that you can have one login valid across * both your website and phpBB. * * To take full advantage of this PHPBB_Login class you just * need to modify your own login system to include a call * to the relevant methods in here. * * This system is reliant on the website username being exactly * the same as the phpBB username. To insure this, I recommend * disabling the ability to change usernames from within the * phpBB admin control panel. * * Distributed under the LGPL license: * http://www.gnu.org/licenses/lgpl.html * * Duncan Gough * 3rdSense.com * * Home http://www.suttree.com * Work http://www.3rdsense.com * Play! http://www.playaholics.com */ class PHPBB_Login { function PHPBB_Login() { } function login($phpbb_user_name) { global $db, $board_config; global $HTTP_COOKIE_VARS, $HTTP_GET_VARS, $SID; // Setup the phpbb environment and then // run through the phpbb login process // You may need to change the following line to reflect // your phpBB installation. // ersetze FORUM_ROOT durch den absoluten Pfad zu deinem Forum require_once(FORUM_ROOT . "/config.php" ); define("IN_PHPBB",true); // You may need to change the following line to reflect // your phpBB installation. $phpbb_root_path = FORUM_ROOT; require_once($phpbb_root_path . "extension.inc"); require_once($phpbb_root_path . "common.php"); /*** modifiziert, um die userID zum Usernamen rauszufinden ***/ $sql = "SELECT *"; $sql .= " FROM " . $table_prefix . "users u"; $sql .= " WHERE username = '" . $phpbb_user_name . "'"; $phpbb_user_id = @mysql_result(@mysql_query($sql),0,"user_id"); /************/ return session_begin($phpbb_user_id,$user_ip,PAGE_INDEX,FALSE,TRUE); } function logout($session_id,$phpbb_user_name) { global $db, $lang, $board_config; global $HTTP_COOKIE_VARS, $HTTP_GET_VARS, $SID; // Setup the phpbb environment and then // run through the phpbb login process // You may need to change the following line to reflect // your phpBB installation. require_once(FORUM_ROOT . "/config.php" ); define("IN_PHPBB",true); // You may need to change the following line to reflect // your phpBB installation. $phpbb_root_path = FORUM_ROOT; require_once($phpbb_root_path . "extension.inc"); require_once($phpbb_root_path . "common.php"); /*** modifiziert ***/ $sql = "SELECT *"; $sql .= " FROM " . $table_prefix . "users u"; $sql .= " WHERE username = '" . $phpbb_user_name . "'"; $phpbb_user_id = mysql_result(@mysql_query($sql),0,"user_id"); /************/ session_end($session_id,$phpbb_user_id); // session_end doesn't seem to get rid of these cookies, // so we'll do it here just in to make certain. setcookie($board_config[ "cookie_name" ] . "_sid", "",time() - 3600," "); setcookie($board_config[ "cookie_name" ] . "_mysql", "",time() - 3600," "); } } ?>
Funktionsaufrufs schon bestehen.
Um die Klasse jetzt zu benutzen, fügt ihr in eurem Skript an der der User eingeloggt wird diesen Code ein:Beim Ausloggen ist es fast ähnlich:Code: Alles auswählen
// PHPBB-Loginklasse instanziieren $phpBB = new PHPBB_Login(); // im Forum einloggen $session_id = $phpBB->login($login_username);
ChristophCode: Alles auswählen
$phpBB = new PHPBB_Login(); $phpBB->logout(session_id(),@mysql_result($query,0,"username"));
Am Ende zählt das was hinten rauskommt und das ist bei dieser Klasse das gleiche, wie bei Autologin von mir, es wird eine eigene Session gestartet danach wird sich bei phpBB angemeldet dort wird ebenfalls eine Session gestartet, also wir haben auch bei dieser Variante 2 Sessions.
Was sich unterscheidet,
ist zuerst der Aufbau, Autologin wird über externe Dateien realisiert, die phpclass ist fein säuberlich in Funktionen gepackt. Man nehme die a_login.php und packe den inhalt in die Funktion login man nehme die Datei a_logout.php und packe den inhalt in die Funktion Logout. Diese Class kann man nun auch am Anfang der Datei einfügen und an der Stelle wo bei Autologin include steht ruft man nun die jeweilige Funktion auf. Und schon wird aus Autologin vom Aufbau und aussehen her eine phpclass. Unterschied 1 ist also rein Optisch vielleicht werde ich mal in ruhigen Minute das so machen, oder jemand anderes…..
War der erste Unterschied nur Optisch wird es jetzt Intimer, das Ergebnis ist fast das gleiche, nur wie es umgesetzt wird unterscheidet sich, viele Wege führen halt nach Rom. Wie beschreibe ich das am besten??? Phpclass nimmt bestimmte Funktionen vor und dem phpBB System ab meldet sozusagen auf eigene Faust den User an. Autologin setzt auf das bestehende System von phpBB auf, liefert praktisch nur Daten die Anmelde Prozedur übernimmt phpBB.
Ein guter Kumpel von mir würde dazu sagen Dirty Hack.

Was ist besser???
Nun das ist Ansichtssache, die einen bevorzugen die eigene Sache wie bei phpclass, die anderen wollen so wenig wie möglich in das System eingreifen.
Ich vermute bei PHPCLASS einen entscheidenden Nachteil bei dieser Cookie Geschichte ich habe das zwar nicht getestet vermute aber das phpclass bei deaktivierten Cookies nicht richtig oder nur eingeschränkt funktioniert. Das Problem sehe ich da bei der Sessionverwaltung und das phpclass diese selbstständig startet oder darin eingreift, aber ich habe es nicht getestet also kann ich nur vermuten.
Zum Problem von mephiztophelez:
Versuche mal die Zeilen:
Code: Alles auswählen
setcookie($board_config[ "cookie_name" ] . "_sid", "",time() - 3600," ");
setcookie($board_config[ "cookie_name" ] . "_mysql", "",time() - 3600," ");
Code: Alles auswählen
setcookie($cookiename . '_data', '', $current_time - 31536000, $cookiepath, $cookiedomain, $cookiesecure);
setcookie($cookiename . '_sid', '', $current_time - 31536000, $cookiepath, $cookiedomain, $cookiesecure);
Timo
Ende

- Blutgerinsel
- Mitglied
- Beiträge: 1801
- Registriert: 19.07.2004 18:53
- Wohnort: Landkreis Ulm
- Kontaktdaten:
Wer lesen kann ist klar im Vorteil.....timo_le hat geschrieben:Die Variante von Blutgerinsel wirkt auf den ersten Blick ganz einfach, jedoch was ist wenn Cookies ausgeschaltet sind?
Greift da ein Fallback wenn ja wie geht?s dann weiter??
Blutgerinsel hat geschrieben: Login: (via UM)
-> Stimme UM Session auf Rules von PHPBB ab
-> Fülle UM Session Table
-> Fülle PHPBB Session Table
-> Übergebe SESSION via HTTP POST an das Forum auch zweites Fenster denkbar
-> Baue ins PHPBB neue Session Logik ein wenn von HTTP Session empfangen erstelle diese Session ansonsten erstelle selber eine eigene
Dadurch sind immer noch wenn gewünscht unabhängige Logins möglich....
Ausloggen: (via UM)
-> Lösche PHPBB Cookie
-> Setze UM Session Table Status logout (bei mir Sessiontime NULL)
-> Setze PHPBB Session Table Status logout (Ablauf noch unklar, da keine Zeit)
Wenn ich naiv wäre würde ich nur die Cookies berrücksichtigen

Klar ich vertrete die Meinung das wenn ich was mache....VERNÜNFTIG MACHE.....von phpBB dürfte jeden Coder abschrecken der ne einfache Lösung sucht, die Session von phpBB umzubauen ist zwar möglich, aber ein erheblicher Aufwand der in keinem Verhältnis zum Nutzen steht.
Und was will ich mit einer Lösung mit der ich 2 Sessions habe?
Selbst in der DV wäre das unvertretbar damit hätte ich eine Redundanz....
2 Sessions ist ein User......
Dieser erhebliche Aufwand ist weiterhin vom Coder abhängig wie er arbeitet......Wenn ich nicht weiss was ich tue dauert es ewig

Na und wenn interessiert das? Es steht unter GPL damit kann ich machen was ich will und wenn ich es als Codebasis verwende dann verwende ich es als Codebasis....2 Sessions,
Wenn man sich die Funktionen der Sessionverwaltung von phpBB ansieht kommt man zu 3 Schlüssen. Die wollen verhindern das man sich da einklinkt, die ist sicher (id entführen bringt nichts), Sie haben gewusst, dass schon eine session laufen könnte wenn das Forum aufgerufen wird. Nicht umsonst verschlüsseln Sie die IP und ihre Session id aus ner Kombination zwischen Ip und Session_id. Desweitern speichern Sie die Session in der DB so einen Aufwand betreibt man nur wenn man davon ausgeht das andere Session Aktiv sein könnten und natürlich der Sicherheit wegen. PhpBB ist drauf ausgelegt in einer Umgebung zu laufen in der schon eine andere Session Aktiv ist.
Tja wozu kann ich Mods schreiben....Dateien öffnen...Stellen suchen und ersetzen?Man stelle sich nur vor man müsste nach jedem Update das ganze noch mal umschreiben.
Genauso unwahrscheinlich ist es das am Sessionmanagment grossartig verändert wird.....
Demzufolge ist dein Argument mehr als Blödsinn....
Na dann mach mal, bin auf deine Arbeit gespannt.
Besonders Intr. mich der Punkt "Fülle PHPBB Session Table" und natürlich "Baue ins PHPBB neue Session Logik ein".
Vor allen dann wenn jede session nach Scriptende geschlossen wird und immer nur eine Aktiv ist??? Hm
Naja ich warte mal auf deine Codes, bist ja nen guter Coder dann lass mal sehen.

Besonders Intr. mich der Punkt "Fülle PHPBB Session Table" und natürlich "Baue ins PHPBB neue Session Logik ein".
Nun das kann sein aber Erkläre mir mal den BlödsinnDemzufolge ist dein Argument mehr als Blödsinn....
Nun wo genau habe ich Redundanz, ich machs dir einfach, ich habe 10 Sessions, wo ist die Redundanz und vor allen die Gefahr????Und was will ich mit einer Lösung mit der ich 2 Sessions habe?
Selbst in der DV wäre das unvertretbar damit hätte ich eine Redundanz....
2 Sessions ist ein User......
Vor allen dann wenn jede session nach Scriptende geschlossen wird und immer nur eine Aktiv ist??? Hm
Naja ich warte mal auf deine Codes, bist ja nen guter Coder dann lass mal sehen.
- Blutgerinsel
- Mitglied
- Beiträge: 1801
- Registriert: 19.07.2004 18:53
- Wohnort: Landkreis Ulm
- Kontaktdaten:
War das nicht genug????Nun das kann sein aber Erkläre mir mal den Blödsinn
Wenn ich von einem sich nicht ändernden oder wenig ändernden Zustand ausgehe und die Anpassung als Mod auslagere habe ich wohl nicht das Problem mit den Updates...
Wenn User X im PHPBB und im UM ist hat er 2 unterschiedliche Sessions, da aber beide Session einen User kennzeichnen....Habe ich eine Redundanz.....Nun wo genau habe ich Redundanz, ich machs dir einfach, ich habe 10 Sessions, wo ist die Redundanz und vor allen die Gefahr????
Vor allen dann wenn jede session nach Scriptende geschlossen wird und immer nur eine Aktiv ist??? Hm
Und zwar an 2 Punkten:
1.) dass nicht alle Datensätze aktuell sind,
2.) dass neuere Informationen an verschiedenen Stellen eingetragen werde...
Ich kann dieser Aufforderung zurzeit nicht nachkommen da dies ein sekunddärer Task ist.....Naja ich warte mal auf deine Codes, bist ja nen guter Coder dann lass mal sehen.
Und der Prioritätenkatalog sehr umfangreich ist....
Mit anderen Worten der Code existiert noch nicht......
Da der Task aber umsetzbar ist wird er kommen, jedoch erst zu gegebener Zeit......
Ich schmeisse nicht meine Planung über den Haufen wegen dieses Forumes

2 Unterschiedliche programme 2 Unterschiedliche sessions für jedes Programm ist nur ein nutzer da........
OK Blutgerinsel, belassen wir es erstmal dabei, mir geht es genauso, eigentlich wollte ich nur mal was testen und nun hänge ich schon wieder Tage an dieser Sache (wertvolle Zeit).... treffen wir uns wieder zu gegebener Zeit sollte ich auf dem Holzweg sein komme ich nach Ulm und gebe einen aus...
Bis demnächst
Timo
OK Blutgerinsel, belassen wir es erstmal dabei, mir geht es genauso, eigentlich wollte ich nur mal was testen und nun hänge ich schon wieder Tage an dieser Sache (wertvolle Zeit).... treffen wir uns wieder zu gegebener Zeit sollte ich auf dem Holzweg sein komme ich nach Ulm und gebe einen aus...

Bis demnächst
Timo
Nein Nuke ist nicht nötig habe es nur bei meinen Test drauf gehabt, deshalb heißen meine usertabellen nukeusers, bei einer Standart installation von phpBB müssten die Tabellen phpbb_users heißen und genauso müsstest du Sie im Index Script nennen.Bokaj hat geschrieben:Ich habe eine frage zum Script - muss ich phpNuke benutzen? Beim anmelden kommt nämlich die Meldung "Table 'MeineDB.nukeusers' doesn't exist".
Bokaj
Schau lieber nochmal in deine phpBB Installation wie deine User tab genau heißt.
Also mache aus allen nukeusers , phpbb_users dann müsste es hinhauen.
Habe das schnell zusammengebaut werde es demnächst etwas ordenlicher neu zusammenbauen als Klasse dann ist die Nutzung auch einfacher.
Mein Fehler habe in der Beschreibung phpbb_users geschrieben aber im Beispiel zum Download nukeusers.... ist jetzt geändert.
http://www.litix.de/phpBB/Autologin/index.php