в Drupal, как сделать состояние входа согласованным между страницами браузера и встроенным клиентом XMLRPC? - PullRequest
1 голос
/ 22 января 2009

У меня есть сайт Drupal с пользовательскими логинами. В этот сайт встроено приложение Flash, которое показывает некоторые данные всем, но предоставляет дополнительные функции, если пользователь вошел в систему. Изнутри Flash я использую XMLRPC для доступа к методу system.check (чтобы определить, вошел ли пользователь в систему) и методу user.login (для входа в систему пользователя из Flash).

В Flash все работает нормально. Однако состояние входа в систему Flash не соответствует остальной части сайта. Например, если я вызываю user.login через XMLRPC, последующие вызовы system.check показывают, что я вошел в систему, но страница пользователя Drupal по-прежнему говорит, что я вышел из системы. Или, если я вошел в оба места и затем вышел из системы через страницу пользователя Drupal, следующий вызов system.check по-прежнему указывает, что я вошел в систему.

Как я могу сделать состояние входа согласованным между графическим интерфейсом Drupal и моим встроенным приложением Flash?

(Примечание. Я не использую какую-либо библиотеку XMLRPC, я просто создаю необходимый XML-файл вручную и отправляю методы POST с использованием объекта URLRequest.)

РЕДАКТИРОВАТЬ: с помощью этого вопроса , а также путем тестирования с помощью веб-прокси я подтвердил, что файл cookie SESS, возвращаемый страницей входа пользователя, забирается и отправляется приложением flash.

РЕДАКТИРОВАТЬ: И теперь я экспериментально показал, что, хотя Flash (через Safari) отправляет тот же файл cookie, он возвращает РАЗНЫЕ файлы cookie при подключении к службе XMLRPC, чем при запросе и странице HTML. Другими словами, Drupal просто не поддерживает такую ​​синхронизацию, и я застрял. Я принимаю ответ ниже, который поставил меня на правильный путь.

РЕДАКТИРОВАТЬ: AMHPHP не полностью выпущен для Drupal6 на момент написания этой статьи, но он все равно был установлен на сайте. Используя библиотеку DrupalSite , я очень легко мог входить и выходить из сайта с флэш-памяти, и вход в систему оставался согласованным между flash и HTML.

Ответы [ 2 ]

1 голос
/ 22 января 2009

Я не очень знаком с Flash, но объекты URLRequest "наследуют" состояние от сеанса браузера, включая файлы cookie для входа пользователя? Если нет, то вам нужно явно отправить cookie для входа в систему с помощью созданного вручную запроса, иначе Drupal решит, что он просто приходит из другого веб-браузера с тем же IP-адресом.

Если вы не совсем уверены, может быть полезным использование плагина Firebug . Он позволяет вам проверять любые запросы, которые передаются через браузер, проверять их заголовки и смотреть на необработанный объект ответа HTTP, который возвращается.

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

0 голосов
/ 24 января 2009

Это не может быть сделано.

(Подробности см. В моем окончательном редактировании исходного вопроса и эквивалентной информации в моем комментарии к @Eaton.)

...