Da ich gerade dieses Problem für mich gelöst habe, stelle ich die Lösung mal hier rein falls es jemanden interessiert.
Da wir einen Mitgliederbereich haben, der aus mehreren verschiedennen Applikationen besteht, ist das problem aufgetreten, dass der Benutzer sich unzählige Male anmelden mus um den Bereich zu nutzen.
Meine Lösung bezieht sich im Moment auf PHPBB und MediaWiki, ist aber auf sämtliche Logins auf dem Server anwendbar!
Voraussetzung ist, dass bei allen Logins die gleichen Benutzer vorhanden sind. (für Wiki gibts da die
PHPBB-Users_Integration)
Für das synchronisieren der Benutzertabellen werde ich später mal noch ein Skript schreiben...
Vom Prinzip her ist der Login sehr simpel: wir erstellen ein Login Formular, und beim absenden simuliert PHP allen logins, dass die Daten von "ihrem eigenen" Formular kämen.
Als erstes erstellen wir ein Login-Formular, typischerweise mit den Feldern "benutzer", "passwort" und "autologin".
Vom verarbeitungsskript aus müssen wir nun mehrere POST-anfragen starten. Da dies mit PHP relativ kompliziert ist, holt man sich am besten die PHP Snoopy-Klasse: http://sourceforge.net/projects/snoopy/
nach einbinden der Klasse, müssen wir einige Variablen definieren:
Code: Alles auswählen
$url = "http://www.meinedomain.ch/wiki/index.php?title=Spezial:Userlogin&action=submitlogin&returnto=Hauptseite";
$vars["wpName"] = $benutzer;
$vars["wpPassword"] = $passwort;
$vars["wpRemember"] = $autologin;
$vars["wpLoginattempt"] = 'Anmelden';
nun muss das ganze nur noch abgesendet werden:
Code: Alles auswählen
$snoopy = new Snoopy();
$snoopy->submit($url, $vars);
Um den Benutzer zu erkennen wird beim Login immer ein Cookie gesetzt. Da wir die Anfrage aber nur simuliert haben, ist dieses Cookie auch nicht beim eigentlichen Benutzer gesetzt worden; es befindet sich noch immer in einer Variable der Snoopy-klasse und muss nun noch beim Benutzer gesetzt werden:
Code: Alles auswählen
//Cookies beim User registrieren
foreach($snoopy->cookies as $key=>$value){
setcookie($key, $value ,time()+3600,'/');
}
hier noch das Ganze im Zusammenhang:
Code: Alles auswählen
<?php
include("Snoopy/Snoopy.class.php"); //Zugriffsklasse um Browser zu "simulieren"
/***************************************************************************
* Login in Wiki
***************************************************************************/
//Formularfelder als Variablen an die Loginseite schicken
$url = "http://www.meinedomain.ch/wiki/index.php?title=Spezial:Userlogin&action=submitlogin&returnto=Hauptseite";
$vars["wpName"] = $benutzer;
$vars["wpPassword"] = $passwort;
$vars["wpRemember"] = $autologin;
$vars["wpLoginattempt"] = 'Anmelden';
$snoopy = new Snoopy();
$snoopy->submit($url, $vars);
//print($snoopy->results); //Rückgabe der Loginseite
//Cookies beim User registrieren
foreach($snoopy->cookies as $key=>$value){
setcookie($key, $value ,time()+3600,'/');
}
/***************************************************************************
* Login in Wiki Ende
***************************************************************************/
/***************************************************************************
* Login in Forum
***************************************************************************/
//Formularfelder als Variablen an die Loginseite schicken
$url = "http://www.meinedomain.ch/forum/login.php";
$vars["username"] = $benutzer;
$vars["password"] = $passwort;
$vars["autologin"] = $autologin;
$vars["login"] = 'Login';
$snoopy = new Snoopy();
$snoopy->submit($url, $vars);
//print($snoopy->results);//Rückgabe der Loginseite
//Cookies beim User registrieren
foreach($snoopy->cookies as $key=>$value){
setcookie($key, $value ,time()+3600,'/');
}
/***************************************************************************
* Login in Forum Ende
***************************************************************************/
?>