Приложение, использующее данные сессии PhpBB - не может использовать короткий код - PullRequest
1 голос
/ 08 ноября 2008

До этого я создавал веб-приложения, использующие сеанс phpBB и пользовательские данные. Обычный шаг - использовать код, подобный следующему:

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();

Однако, включая common.php, я привожу дерьмовую нагрузку на другие методы, которые работают с другими методами, которые у меня есть.

В моем примере я запускаю приложение, используя CodeIgniter, у которого уже есть метод "перенаправления". Этот вопрос должен применяться ко всем, у кого есть готовые методы, которые могут работать с методами phpBB.

В общем, все, что мне нужно сделать, это:

  1. Убедитесь, что пользователь вошел в систему $user->data[username] == Anonymous
  2. Использование данных из $ user-> data, таких как идентификатор пользователя, имя экрана и т. Д.

Могу ли я получить массив $user->data и каким-то образом сохранить его в моем собственном сеансе? У кого-нибудь есть идеи по этому поводу? Заранее спасибо!

Ответы [ 2 ]

1 голос
/ 11 ноября 2008

phpBB изменил алгоритм проверки пароля, хранящегося в базе данных, с версии 2.x до 3.0. (Раньше это была просто функция MD5.) Но если вы можете найти их полу-SDK url (его нет под рукой), там есть сообщения о том, как использовать их проверку пользователя на более высоком уровне абстракции, чем вы описываете. .

Это тот случай, когда, если вы собираетесь использовать их ресурс, вам нужно сделать это по-своему (что в данном случае более явно, чем раньше).

Я согласен, что это рискованное решение в любом случае; тем более, что phpBB не имеет особо впечатляющего показателя качества дизайна.

1 голос
/ 11 ноября 2008

Вы столкнулись с основной причиной, по которой я ненавижу фреймовые работы. Вы никогда не знаете, что именно включено. Особенно, когда код не является объектно-ориентированным. (гораздо лучше, если ваша функция принадлежит объектам, а не свободно перемещается в глобальном пространстве.)

Если в вашем коде уже есть определенный обработчик сеанса, ничто не мешает вам использовать обычные команды сеанса.

например: $ _SESSION ['user_data_array'] = $ user-> data;

затем позже с использованием данных сеанса

$ data = $ _SESSION ['user_data_array'];

Когда записывается обработчик сеанса, он заменяет текущий обработчик сеанса. (Я предполагаю, что это было сделано для того, чтобы сеанс сохранялся в базе данных, а не на сервере.)

Если он не был заменен, то вы все равно можете использовать PHP как обработчик сеанса по умолчанию. Помните, что данные сеанса сохраняются в папке на текущем веб-сервере. Поэтому, если ваше приложение запускается на нескольких серверах, данные сеанса будут недоступны, если пользователь обслуживается другим сервером при последующем посещении. (отсюда необходимость написания обработчиков сеансов для сохранения данных сеанса между несколькими серверами.)

...