Eigenen Login verwenden, welche Session Vars muss ich setzen

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Benutzeravatar
Blutgerinsel
Mitglied
Beiträge: 1801
Registriert: 19.07.2004 18:53
Wohnort: Landkreis Ulm
Kontaktdaten:

Beitrag von Blutgerinsel »

Und was ist wenn ich mich zuerst im PHPBB anmelde?
timo_le
Mitglied
Beiträge: 18
Registriert: 12.10.2004 10:28

Beitrag von timo_le »

Dann wirst du auch bei deinem UM angemeldet....
timo_le
Mitglied
Beiträge: 18
Registriert: 12.10.2004 10:28

Beitrag von timo_le »

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: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....
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.

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.
timo_le
Mitglied
Beiträge: 18
Registriert: 12.10.2004 10:28

Re: Login im phpbb von eigener Benutzverwaltung/Portal

Beitrag von timo_le »

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:

Code: 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," ");
	}
}
?>
Zu beachten ist, dass ich bevor ich die Klasse eingebunden habe, schon eine Datenbankverbindung hergestellt habe, denn die muss ja wärend des

Funktionsaufrufs schon bestehen.


Um die Klasse jetzt zu benutzen, fügt ihr in eurem Skript an der der User eingeloggt wird diesen Code ein:

Code: Alles auswählen

		// PHPBB-Loginklasse instanziieren
		$phpBB	= new PHPBB_Login();
		// im Forum einloggen
		$session_id = $phpBB->login($login_username);
Beim Ausloggen ist es fast ähnlich:

Code: Alles auswählen

$phpBB	= new PHPBB_Login();
$phpBB->logout(session_id(),@mysql_result($query,0,"username"));
Christoph
Also zur Klasse.
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," ");
durch

Code: Alles auswählen

setcookie($cookiename . '_data', '', $current_time - 31536000, $cookiepath, $cookiedomain, $cookiesecure);
	setcookie($cookiename . '_sid', '', $current_time - 31536000, $cookiepath, $cookiedomain, $cookiesecure);
zu ersetzen....

Timo
Ende

:o
Benutzeravatar
Blutgerinsel
Mitglied
Beiträge: 1801
Registriert: 19.07.2004 18:53
Wohnort: Landkreis Ulm
Kontaktdaten:

Beitrag von Blutgerinsel »

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)
Wer lesen kann ist klar im Vorteil.....
Wenn ich naiv wäre würde ich nur die Cookies berrücksichtigen :roll:
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.
Klar ich vertrete die Meinung das wenn ich was mache....VERNÜNFTIG MACHE.....
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 :roll:
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.
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....
Man stelle sich nur vor man müsste nach jedem Update das ganze noch mal umschreiben.
Tja wozu kann ich Mods schreiben....Dateien öffnen...Stellen suchen und ersetzen?
Genauso unwahrscheinlich ist es das am Sessionmanagment grossartig verändert wird.....

Demzufolge ist dein Argument mehr als Blödsinn....
timo_le
Mitglied
Beiträge: 18
Registriert: 12.10.2004 10:28

Beitrag von timo_le »

Na dann mach mal, bin auf deine Arbeit gespannt. :D
Besonders Intr. mich der Punkt "Fülle PHPBB Session Table" und natürlich "Baue ins PHPBB neue Session Logik ein".
Demzufolge ist dein Argument mehr als Blödsinn....
Nun das kann sein aber Erkläre mir mal den Blödsinn
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......
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

Naja ich warte mal auf deine Codes, bist ja nen guter Coder dann lass mal sehen.
Benutzeravatar
Blutgerinsel
Mitglied
Beiträge: 1801
Registriert: 19.07.2004 18:53
Wohnort: Landkreis Ulm
Kontaktdaten:

Beitrag von Blutgerinsel »

Nun das kann sein aber Erkläre mir mal den Blödsinn
War das nicht genug????
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...
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
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.....
Und zwar an 2 Punkten:
1.) dass nicht alle Datensätze aktuell sind,
2.) dass neuere Informationen an verschiedenen Stellen eingetragen werde...
Naja ich warte mal auf deine Codes, bist ja nen guter Coder dann lass mal sehen.
Ich kann dieser Aufforderung zurzeit nicht nachkommen da dies ein sekunddärer Task ist.....
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 :roll:
timo_le
Mitglied
Beiträge: 18
Registriert: 12.10.2004 10:28

Beitrag von timo_le »

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...

:cookie:

Bis demnächst

Timo
Bokaj
Mitglied
Beiträge: 5
Registriert: 20.10.2004 19:14
Wohnort: Basel (CH)
Kontaktdaten:

Beitrag von Bokaj »

Ich habe eine frage zum Script - muss ich phpNuke benutzen? Beim anmelden kommt nämlich die Meldung "Table 'MeineDB.nukeusers' doesn't exist".

Bokaj
timo_le
Mitglied
Beiträge: 18
Registriert: 12.10.2004 10:28

Beitrag von timo_le »

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
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.
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
Antworten

Zurück zu „Coding & Technik“