Seite 1 von 1

externes Login und Forum in IFrame | phpBB Session

Verfasst: 16.08.2003 18:45
von Jedi
Hi!

Seit einigen Tagen spiel ich mich jetzt schon mit phpBB herum, aber ich bekomm meine Probleme damit einfach nicht in den Griff. Anmerken möchte ich noch, dass ich nicht grad en php-profi bin … )
Zwar hab ich zum Thema schon etliche Threads gelesen, hab damit leider kaum etwas weiter gebracht.

Umgebung:
Php4, mysql3, phpBB 2.0.6

Der root Ordner heißt ‘lan2k3_phpbb’. Dieser Ordner enthällt wiederum den Ordner phpBB, meine index.php (layout + etwas verwaltung) und einige andere Ordner/Dateien für die Verwaltung der Page, die aber an dieser Stelle eher unwichtig sind.

index.php ruft alle anderen *.php’s auf, die angezeigt warden sollen. In einem IFrame erfolgt die Darstellung der Hauptelemente. Momentan arbeite ich eben daran, phpBB auf der Seite zu integrieren.
Alle anderen Linien die beim derzeitigen Grundgerüst zu sehen sind, sind Tabellenrahmen.


1) EXTERNES LOGIN/LOGOUT

Das Login soll außerhalb des Forums erfolgen, und zwar links oben auf der Page
( www.jedinger.host55.com/lan2k3_phpbb/index.php )

Ich habe breits einigen Code hier aus dem phpBB Forum meiner index.php hinzugefügt:

Code: Alles auswählen

<?php
// PHPBB

define('IN_PHPBB', true); 
$site_root_path = './'; 
$phpbb_root_path2 = '/phpBB/';  
$phpbb_root_path = $site_root_path . $phpbb_root_path2; 
include($phpbb_root_path . 'extension.inc'); 
include($phpbb_root_path . 'common.php'); 
include($phpbb_root_path . 'config.php'); 

$userdata = session_pagestart($user_ip, PAGE_INDEX); 
init_userprefs($userdata); 

// PHPBB

//other includes, table-code and so on:
...

//and the login code:

<?php
echo "you are visitor #[mix with phpBB]<br><br>";
if ( $userdata["session_logged_in"] ) 
{ 
	echo "Welcome " . $userdata["username"]; 
	$u_login_logout = "phpBB/login.".$phpEx."?logout=true&sid=" . $userdata["session_id"]; 
	$l_login_logout = $lang["Logout"]; 
	echo "<br><br><div align=\"center\">.: <a href=\"index.php?main=$u_login_logout\">logout</a>:.</div>";
} 
else 
{ 
?>
<form method="post" action="index.php?main=phpBB/index.php&sid=<?php echo $userdata["session_id"];?>"> 
<table width="100%" cellpadding="3" cellspacing="0" border="0" class="forumline"> 
<tr> 
<td class="row1" align="center" valign="middle" height="28"><span class="gensmall">nick: 
<input class="post" type="text" name="username" size="10" /><br> 
password: 
<input class="post" type="password" name="password" size="10" maxlength="32" /><br>
auto login: 
<input class="text" type="checkbox" name="autologin" /> 
<input type="submit" class="mainoption" name="login" value="login" /> 
</span> </td> 
</tr> 
</table> 
</form> 
<div align="center">.: <a href="index.php?main=phpBB/profile.php?mode=register">register now !</a> :.</div>
<?php
}
?>
Den Target-Tag in der login_body.tpl hab ich übrigens auch gelöscht.


ZUM TESTEN KÖNNT IHR MIT FOLGENDEN LOGINDATEN ARBEITEN:
User: testuser
Password: test

IHR HABT KEINE ADMINRECHTE!


Wenn ihr ein login von links oben (damits keine Verwechslungen gibt bezeichne ich das externe Login im Folgenden immer als 'links oben) macht, funktioniert es nicht. (‚register now!’ geht übrigens)
Wenn ihr im Menü auf ‚forum’ klickt, und euch dort einloggt, seit Ihr erst mal im Forum eingeloggt. Erst nachdem ihr auf einen weiteren Link klickt (z. B. ‚news’) wird das Fenster links oben aktualisiert. (was derzeit nicht mein Hauptproblem ist).
Was muss ich machen, damit das Login von außerhalb funktioniert?


Zusammenfassung:Was ich brauche ist folgendes
- Korrekturmaßnahmen am eigenen bzw. phpBB code, damti login funktionierr
- Löschen von ‘register’ und ‘login’ im phpBB selbst.



2) SESSIONS
Bevor ich angefangen habe, phpBB zu integrieren, funktionierte beispielsweise das hinzufügen einer Sessionvariable problemlos.
Jetzt habe ich folgendes Problem:

Vorher hatte ich die session-variablen ‘nick’ und ‘password’. phpBB verwendet hingegen $userdata[‚username’] und $userdata[‚user_password’]. Ich habe genau wie vorher z.b. die news.php mit der sessionvariable ($userdata[‚session_id’]) aufgerufen und in news.php gesetz, kann jetzt allerdings nicht auf diese art zugreifen. Sie sind nicht gesetzt, oder was auch immer.

Code: Alles auswählen

 index.php?main=news&main_sid=<?php echo $userdata["session_id"];?>
Wie würde das richtig funktionieren?
Und wie kann ich meine eigenen Session variablen zu denen von phpBB hinzufügen? Wenn ich versuche z.b. eine Counter-variable hinzuzufügen bekomme ich einen Fehler:

Gleich nach den phpBB includes in meiner index.php hab ich probeweise folgendes hinzugefügt:

Code: Alles auswählen

session_register("counter");
und become diesen Fehler: (das war allerdings auf meinem lokalen computer, da ich zum testen hauptsächlich offline arbeite; ich zahle minutenweise …. )
Warning: open(/tmp\sess_365757989f399f857d6295aacb10b85b, O_RDWR) failed: m (2) in c:\apache\htdocs\lan2k3\index.php on line 22
(der Pfad stimmt mal sicher nicht, wie kann ich den umstellen, ohne dass sich phpBB aufregt und wie gewohnt weiter arbeitet?)

Ok, meine eigene Session variable hinzuzufügen ist nicht das eigentliche Problem. Zurück zu den bestehenden Session variablen:

Das Menü ruft z.B. news wie folgt auf:

Code: Alles auswählen

index.php?main=news/news.php
Index.php macht nun folgendes:
Verwaltung von login/logout Sachen (Poll, Shout, etc)
Anschließend warden IFrame spezifische Sachen abgewickelt:

Code: Alles auswählen

<?php
// show news as default
if ($main == "")
	$main = "news/news.php";

// each content of the iframe (news, guestbook, events, etc.) should be able to access the session variables of the parent window
$main = $main."?sid=".$userdata["session_id"];

// phpBB variables
if ($mode != "")
	$main = $main."&mode=".$mode;
if ($logout != "")
	$main = $main."&logout=".$logout;


/* if I add this, login has mistakes (@news, …)
if ($username != "")
	$main = $main."&username=".$username;
if ($password != "")
	$main = $main."&password=".$password;
*/
?>
<iframe name="main" src="<?php echo $main;?>" 
width="100%" height="100%" marginheight="0" marginwidth="0" frameborder="1">
<p>Your browser is unable show iframes!</p>
</iframe>
[...]
Bevor ich phpBB eingebunden habe, wurde z.b. bei news.php die übergebene sessionvariable übernommen:

Code: Alles auswählen

session_id($sid); 
und hatte somit Zugriff auf alle Variablen

Wenn ich das nun mit der phpBB session-id mache, geht es allerdings nicht mehr.

Ich versuchte nun, beim phpBB code einiges zu modifizieren, entdeckte allerdings, dass dies doch etwas komplexer ist. (index.php aus dem phpBB verzeichnis ruft common.php auf, welches wiederum verschiedene includes beinhaltet, die für die Sessonverwaltung zuständig sind)

Da ich mir nicht sicher bin, wie sich Änderungen auf das Gesamtverhalten von phpBB auswirken, warte noch auf Meinungen von Leuten mit mehr Erfahrungen und Wissen.


Es muss etwas geben …

Bitte helft mir