1

我有一个带有用户登录名的 Drupal 站点。该站点中嵌入了一个 Flash 应用程序,该应用程序向所有人显示一些数据,但如果用户登录,则允许使用额外的功能。在 Flash 中,我使用 XMLRPC 访问 system.check 方法(确定用户是否已登录)和 user.login 方法(从 Flash 中登录用户)。

在 Flash 中,一切正常。但是,Flash 登录状态似乎与站点的其余部分不对应。例如,如果我通过 XMLRPC 调用 user.login,随后对 system.check 的调用显示我已登录,但 Drupal 用户页面仍然显示我已注销。或者,如果我在这两个地方都登录了,然后通过 Drupal 用户页面注销,下一次调用 system.check 仍然表明我已登录。

如何使 Drupal GUI 和我的嵌入式 Flash 应用程序之间的登录状态保持一致?

(注意:我没有使用任何 XMLRPC 库,我只是手动构建必要的 XML 并使用 URLRequest 对象发送 POST 方法。)

编辑:我已经通过这个问题以及通过 Web 代理测试确认用户登录页面返回的 SESS cookie 正在被 Flash 应用程序拾取并发送回。

编辑:现在我已经通过实验证明,即使 Flash(通过 Safari)发送相同的 cookie,它在连接到 XMLRPC 服务时会返回一个不同的 cookie,而不是在请求和 HTML 页面时。换句话说,Drupal 就是不支持这种同步,我被卡住了。我接受下面的答案,使我走上正轨。

编辑:在撰写本文时,AMHPHP 尚未完全针对 Drupal6 发布,但事实证明它已安装在网站上。使用DrupalSite库,我可以非常轻松地从 flash 登录和登出站点,并且登录在 flash 和 HTML 之间保持一致。

4

2 回答 2

1

我对 Flash 不是很熟悉,但是 URLRequest 对象是否从浏览器会话“继承”状态,包括用户登录 cookie?如果没有,您将需要在您手动构建的请求中显式发送登录 cookie,否则 Drupal 会认为它只是来自具有相同 IP 地址的另一个 Web 浏览器。

如果您不太确定,使用Firebug插件可能会很有用。它允许您检查通过浏览器传输的任何请求,检查它们的标头,并查看返回的原始 HTTP 响应对象。

更新:比获取会话 cookie 的 Flash 小部件更重要的是获取与 Web 浏览器本身相同的会话 cookie 的 Flash 小部件。Drupal 允许用户同时从多台机器登录,因此如果浏览器正在创建一个会话而 flash 小部件正在创建另一个会话,您会看到您所描述的行为......

于 2009-01-21T22:57:56.670 回答
0

这是不可能的。

(有关详细信息,请参阅我对原始问题的最终编辑以及我对@Eaton 的评论中的等效信息。)

于 2009-01-24T02:03:35.233 回答