phpbb Cookies für Rest der Webseite übernehmen

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.
Seether
Mitglied
Beiträge: 1446
Registriert: 10.10.2002 23:42

phpbb Cookies für Rest der Webseite übernehmen

Beitrag von Seether »

Hi.
Ich möchte einen Teil meiner Homepage nur denen zur Verfügung stellen die auch im Forum angemeldet sind. Dafür gibt es ein Login auf der Hauptseite der die Daten mit der DB abgleicht.....Nun möchte ich aber, falls die eingegebenen Daten richtig sind sie in einem Cookie speichern, damit der User sie beim nächsten mal nicht wieder eingeben muss. Dabei darf es aber keinen Konflikt mit den Daten aus dem Forum geben. Sprich der user sollte beim nächsten Forenlogin auch alle neuen Beiträge sehen können.


Wie mache ich das am besten?

S.
Programmer
Mitglied
Beiträge: 32
Registriert: 10.08.2003 13:34
Kontaktdaten:

Beitrag von Programmer »

Ein Auszug aus der SESSION.PHP:

Code: Alles auswählen

	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;
	}

	//
	// Does a session exist?
	//
	if ( !empty($session_id) )
	{
		//
		// session_id exists so go ahead and attempt to grab all
		// data in preparation
		//
		$sql = "SELECT u.*, s.*
			FROM " . SESSIONS_TABLE . " s, " . USERS_TABLE . " u
			WHERE s.session_id = '$session_id'
				AND u.user_id = s.session_user_id";
		if ( !($result = $db->sql_query($sql)) )
		{
			message_die(CRITICAL_ERROR, 'Error doing DB query userdata row fetch', '', __LINE__, __FILE__, $sql);
		}

		$userdata = $db->sql_fetchrow($result);
Dieses kannst du übernehmen und in deine Funktionen einbauen.
Zu beachten sind nur, dass die Variabeln für cookienamen gesetzt sind.
Sowie die Daten aus der MYSQL - Datenbank.

Bei mir sieht das so aus:

Code: Alles auswählen

		if(isset($HTTP_COOKIE_VARS['clan-sou-forum_sid']) || isset($HTTP_COOKIE_VARS['clan-sou-forum_data']) )
		{
			$sessiondata = isset( $HTTP_COOKIE_VARS['clan-sou-forum_data'] ) ? unserialize(stripslashes($HTTP_COOKIE_VARS['clan-sou-forum_data'])) : array();
			$session_id = isset( $HTTP_COOKIE_VARS['clan-sou-forum_sid'] ) ? $HTTP_COOKIE_VARS['clan-sou-forum_sid'] : '';
		}
	
		if (!empty($session_id))
		{
			// session_id exists so go ahead and attempt to grab all
			// data in preparation
			$sql = "SELECT u.*, s.*
				FROM phpbb_sessions s, phpbb_users u
				WHERE s.session_id = '$session_id'
					AND u.user_id = s.session_user_id";
		
			if ($objrs = $conn->Execute($sql))
			{
				echo "<p class='gen'>".$objrs->fields['username']."</p>";			
				echo "<p class='gen'>".$objrs->fields['user_id']."</p>";			
				echo "<p class='gen'>".$objrs->fields['user_active']."</p>";			
							
			}
		}
Somit erhält man die Daten, die das Forum für sich selbst verwaltet.
Man braucht somit keinen eigenen Login/Logout zu haben.

Achja, bevor ich es vergesse:

Code: Alles auswählen

$autologin = ( isset($HTTP_POST_VARS['autologin']) ) ? TRUE : 0;
damit weiss du auch bescheid, ob der jenige eingeloggt sein möchte oder nicht.
Ich hoffe, ich konnte dir damit helfen...
.Matthias
Mitglied
Beiträge: 18
Registriert: 10.08.2003 15:43
Wohnort: München

Beitrag von .Matthias »

Hi

Geht das auch andersherum? :grin:

Auf meiner Homepage erscheint eine Loginbox mit Benutzer und Passwort. Diese beiden Formulardaten werden schon erfolgreich mit der phpbb_users-Tabelle abgeglichen (das hab ich noch hingekriegt). Nach erfolgreichem Login soll der Benutzer dann im Mitgliedsbereich sein. Im Mitgliedsbereich kann er dann in unterschiedliche Bereiche gehen: Tipps & Tricks, etc. und dann eben auch in den Bereich Forum.

Wie kriegt man das hin, dass der Benutzer im Mitgliedsbereich ist, dass aber auch schon die Bedingungen (session, cookie, etc.) für das erfolgreiche Aufrufen/"eingeloggt-sein" des Forums erfüllt sind.

Gruß

Matthias
Programmer
Mitglied
Beiträge: 32
Registriert: 10.08.2003 13:34
Kontaktdaten:

Beitrag von Programmer »

@.Matthias

Eigentlich weisst du ja schon, ob derjenige drin ist oder nicht.
Du brauchst nur noch die Variabeln abfragen.

Meine Lösung ist ja, dass man per Cookie erkannt wird.
Somit sollte das automatische einloggen für die ganze Seite ermöglichen.

Jedoch habe ich gerade noch ein Problem festgestellt.

Das Problem ist bei meiner Lösung, dass man zumindest zuvor einmal im Forum sein musste, um danach automatisch erkannt zu werden. Ansonsten funktioniert die Erkennung trotz Cookie nicht.
.Matthias
Mitglied
Beiträge: 18
Registriert: 10.08.2003 15:43
Wohnort: München

Beitrag von .Matthias »

Hi Programmer!

Danke für die Antwort!

Irgendwie hab ich ne Denkblockade. Der User ist in den Mitgliedsbereich vorgedrungen (nachdem das Passwort und der Benutzername durch meine Loginroutine in der phpbb_users-Tabelle erfolgreich gecheckt wurde).

Wenn ich jetzt aber im Mitgliederbereich auf den Link "Forum" klicke, dann weiß ja das Forum noch nichts von dem User und verlangt von Ihm logischerweise wieder einen Login. Diesesmal würde dann ja durch die Forumsloginroutine ne Session in der Datenbank erstellt. Wie krieg ich das aber hin, dass

- entweder das Forum "mitgeteilt" bekommt, dass dieser User bereits ne Session hat
- bzw. das mein Login-Skript, wie das Forum-Login-Script, die gleichen Daten in die Datenbank schreibt.

Ich steh echt vor'm Berg muss ich sagen :roll:

Gruß

.Matthias
Programmer
Mitglied
Beiträge: 32
Registriert: 10.08.2003 13:34
Kontaktdaten:

Beitrag von Programmer »

Andersherum...

Du gibst ihm zum Einloggen das FORUM LOGIN...
Dann weiss das Forum, dass er drin ist.

Diese Daten kannst du wie oben beschrieben auch selber nutzen.
Programmer
Mitglied
Beiträge: 32
Registriert: 10.08.2003 13:34
Kontaktdaten:

Beitrag von Programmer »

Also im Forum habe ich jetzt was gefunden, was 100% funktioniert.

Code: Alles auswählen

define('IN_PHPBB', true);
$phpbb_root_path = '../forum/';
include($phpbb_root_path . 'extension.inc');
include($phpbb_root_path . 'common.'.$phpEx);

// 
// Start session management 
// 
$userdata = session_pagestart($user_ip, PAGE_INDEX); 
init_userprefs($userdata); 
und aus der Variabel $userdata bekommt man alle Informationen:

Code: Alles auswählen

	$user->name			=	$userdata['username'];
	$user->forumId		=	$userdata['user_id'];
	$user->forumactive	=	$userdata['user_active'];
	$user->autologin	=	$userdata['autologin'];
	$user->sessionlogin =	$userdata['session_logged_in'];
Auch schlage ich vor, da es solche Fragen ja öfters gibt bzw. geben wird, eine Workshop in die phpbb.de einzubauen.

Dann findet man dort gleich fertige Lösungen...
codemonkey
Ehemaliges Teammitglied
Beiträge: 3005
Registriert: 13.10.2002 15:15
Wohnort: Wilhelmshaven
Kontaktdaten:

Beitrag von codemonkey »

Programmer hat geschrieben:und aus der Variabel $userdata bekommt man alle Informationen:

Code: Alles auswählen

	$user->name			=	$userdata['username'];
	$user->forumId		=	$userdata['user_id'];
	$user->forumactive	=	$userdata['user_active'];
	$user->autologin	=	$userdata['autologin'];
	$user->sessionlogin =	$userdata['session_logged_in'];
Aus dem Array $userdata kann man aber noch wesentlich mehr raushohlen. http://www.phpbb.de/viewtopic.php?p=187876#187876
Benutzeravatar
Henne
Ehemaliges Teammitglied
Beiträge: 4520
Registriert: 04.01.2002 01:00
Wohnort: Lage (Lippe)
Kontaktdaten:

Beitrag von Henne »

Wenn man MODs eingebaut hat noch mehr.
Da man u.a. an die ganzen Daten der Usertabelle kommt...
codemonkey
Ehemaliges Teammitglied
Beiträge: 3005
Registriert: 13.10.2002 15:15
Wohnort: Wilhelmshaven
Kontaktdaten:

Beitrag von codemonkey »

Ich gehe grundsätzlich mit solchen Aussagen von einem standard phpBB aus ;)
Antworten

Zurück zu „Coding & Technik“