Приложение, использующее данные сеанса PhpBB — нельзя использовать короткий код

До этого я создавал веб-приложения, использующие сеанс 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 и каким-то образом сохранить его в своем сеансе? У кого-нибудь есть идеи по этому поводу? Заранее спасибо!


person jmccartie    schedule 08.11.2008    source источник


Ответы (2)


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

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

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

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

$data = $_SESSION['user_data_array'];

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

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

person Bingy    schedule 10.11.2008
comment
вставка этого массива в массив сеанса должна быть выполнена внутри phpBB, верно? ... так как у меня нет доступа к объекту $user, пока я не загружу все включаемые файлы из phpBB - person jmccartie; 19.11.2008
comment
Я попробовал это. Мне удалось сохранить массив $user-›data в _session, но CI перезаписал его. когда я пытаюсь загрузить его в CI, я получаю переменную Undefined: _SESSION - person jmccartie; 15.01.2009

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

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

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

person dkretz    schedule 10.11.2008