session OHNE $user-objekt auslesen
Verfasst: 30.04.2010 22:55
Hi!
Für eine Website versuche ich einen phpbb3 adapter zu schreiben. Ich möchte, dass ein User, der sich im Forum eingeloggt hat auch auf der Website eingeloggt ist. Aus kollisions Gründen (z.B. globale Variablen des phpBB3 ) ist es NICHT möglich, das über die normale phpbb3-standard lösung mit common.php und $user->session_begin() zu machen. (Also weder "Vorlage für in phpBB3 eingebundene Seiten" noch "Authentication Plugins" helfen mir hier - es seidenn jemand kennt eine Möglichkeit, wie ich innerhalb einer php-function das ganze serielle phpbb3-script fürs session-managment ohne Kollisionen mit dem anderen Framework abhandeln kann - quasi eine Sandbox in der das phpbb3-script läuft?..).
Die cookies sind kein Problem:
damit komm ich dann an die session und user_id.
Das funktioniert allerdings nur, wenn der User "automtisch anmelden" beim einloggen markiert und natürlich cookies unterstützt.
Ich möchte nun die session auch bekommen, ohne dass der user diese option markiert haben muss. (Also für einen Login ohne "Mich bei jedem Besuch automatisch anmelden").
Was ich im phpbb3-Code gefunden habe und versucht habe zu adaptieren, hat leider nicht geklappt.
Ich brauche eigentlich nur die user_id oder session_id, um den user zu identifizieren. Den Rest bekomme ich aus der Datenbank.
Jetzt ist die große frage, wie komme ich an die session vom phppbb OHNE phpbb Funktionen inkludieren zu müssen?
Das ist glaube ich der relevante Code-Teil vom phpBB3:
Ich habe versucht die request_var function zu verkürzen auf das was ich daraus brauche und mit dieser dann an die sid zu kommen. Leider hat das nicht geklappt und die sid ist immer leer.
Was brauche ich noch um an die sid zu kommen?
Für eine Website versuche ich einen phpbb3 adapter zu schreiben. Ich möchte, dass ein User, der sich im Forum eingeloggt hat auch auf der Website eingeloggt ist. Aus kollisions Gründen (z.B. globale Variablen des phpBB3 ) ist es NICHT möglich, das über die normale phpbb3-standard lösung mit common.php und $user->session_begin() zu machen. (Also weder "Vorlage für in phpBB3 eingebundene Seiten" noch "Authentication Plugins" helfen mir hier - es seidenn jemand kennt eine Möglichkeit, wie ich innerhalb einer php-function das ganze serielle phpbb3-script fürs session-managment ohne Kollisionen mit dem anderen Framework abhandeln kann - quasi eine Sandbox in der das phpbb3-script läuft?..).
Die cookies sind kein Problem:
Code: Alles auswählen
/**
* reads client cookies of the phpBB3
*
* @param string $phpbbCookieName
* @return array - phpbb3-cookies with sessionKey, user_id and sessionId
*/
private static function readCookies($phpbbCookieName)
{
$sessionKey = sfContext::getInstance()->getRequest()->getCookie($phpbbCookieName.'_k');
$user_id = sfContext::getInstance()->getRequest()->getCookie($phpbbCookieName.'_u');
$sessionId = sfContext::getInstance()->getRequest()->getCookie($phpbbCookieName.'_sid');
$cookies = array('sessionKey' => $sessionKey,
'user_id' => $user_id,
'sessionId' => $sessionId,
);
return $cookies;
}
Das funktioniert allerdings nur, wenn der User "automtisch anmelden" beim einloggen markiert und natürlich cookies unterstützt.
Ich möchte nun die session auch bekommen, ohne dass der user diese option markiert haben muss. (Also für einen Login ohne "Mich bei jedem Besuch automatisch anmelden").
Was ich im phpbb3-Code gefunden habe und versucht habe zu adaptieren, hat leider nicht geklappt.
Ich brauche eigentlich nur die user_id oder session_id, um den user zu identifizieren. Den Rest bekomme ich aus der Datenbank.
Jetzt ist die große frage, wie komme ich an die session vom phppbb OHNE phpbb Funktionen inkludieren zu müssen?
Das ist glaube ich der relevante Code-Teil vom phpBB3:
Code: Alles auswählen
function session_begin($update_session_page = true)
{
global $phpEx, $SID, $_SID, $_EXTRA_URL, $db, $config, $phpbb_root_path;
//...
if (isset($_COOKIE[$config['cookie_name'] . '_sid']) || isset($_COOKIE[$config['cookie_name'] . '_u']))
{
//...
}
else
{
$this->session_id = $_SID = request_var('sid', '');
$SID = '?sid=' . $this->session_id;
}
//...
}
Was brauche ich noch um an die sid zu kommen?