Aplicação Usando PhpBB Dados de Sessão - não pode usar o código curto
-
07-07-2019 - |
Pergunta
Eu construí aplicações web antes que utilizam sessão phpBB, e dados do usuário. O movimento comum é usar um código como este:
define('IN_PHPBB', true);
//replace $phpbb_root_path with path to your forum
$phpbb_root_path = '../forum/';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
include($phpbb_root_path . 'common.' . $phpEx);
// Start session management
$user->session_begin();
$auth->acl($user->data);
$user->setup();
No entanto, incluindo common.php
, trago ao longo de uma porcaria de carga de outros métodos que são executados em outros métodos que eu tenho configuração.
No meu exemplo, eu estou executando o aplicativo usando CodeIgniter, que já tem um método "redirecionamento". Esta questão deve aplicar-se a qualquer pessoa que tenha métodos pré-construídos que podem correr para os métodos phpBB.
Basicamente, tudo necessidade I a fazer é:
- Verifique se o usuário está logado
$user->data[username] == Anonymous
- Utilizar dados de '$ user-> dados', como ID do usuário, screenname, etc.
Eu poderia agarrar a matriz $user->data
, e de alguma forma salve-o em minha própria sessão? Alguém tem alguma idéia sobre isso? Agradecemos antecipadamente!
Solução
Você correr para a principal razão que eu odeio obras de quadros. Você nunca sabe exatamente o que está sendo incluído. Especialmente quando o código não é orientado ao objecto. (Muito melhor se a sua função pertencem aos objetos, ao invés de livre flutuação em um espaço global.)
Assumindo que o seu código tem um manipulador de sessão definido já no lugar, não há nada que você parar de usar os comandos Ordinário de Sessões.
por exemplo: $ _SESSION [ 'user_data_array'] = $ user-> dados;
, posteriormente, usando teh dados da sessão
$ data = $ _SESSION [ 'user_data_array'];
Quando um manipulador de sessão está escrito, ele substitui o manipulador de sessão atual. (Presumo que tem sido feito para que a sessão é armazenado no banco de dados, em vez de no servidor.)
Se não tiver ser substituído, então você ainda pode usar o manipulador de sessão padrão do PHP .. urso sempre em mente que os detalhes da sessão são salvos em uma pasta no servidor web atual. Portanto, se seu aplicativo é executado em vários servidores, os dados da sessão não estará disponível se o usuário está sendo servido por um servidor diferente em uma visita posterior. (Daí a necessidade de escrever manipuladores de sessão para preservar os dados da sessão entre vários servidores.)
Outras dicas
phpBB mudou o algoritmo para validar a senha armazenada no banco de dados da versão 2.x para o 3.0. (Ela costumava ser apenas uma função MD5.) Mas se você pode encontrar o seu url semi-SDK (não tê-lo na mão), há postagens lá sobre como usar sua verificação do usuário em um nível mais alto de abstração do que você descrever .
Este é um caso em que, se você estiver indo para bater o seu recurso, você precisa fazê-lo seu caminho (que neste caso é mais explícito do que costumava ser.)
Concordo que é uma decisão arriscada de qualquer forma; especialmente desde phpBB não tem um registro particularmente admirável para a qualidade do projeto.