在Drupal中,如何使浏览器页面和嵌入式XMLRPC客户端之间的登录状态保持一致?

时间:2009-01-21 22:06:22

标签: drupal drupal-6 xml-rpc

我有一个带用户登录的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方法。)

编辑:我已通过this question确认,并通过Web代理测试,用户登录页面返回的SESS cookie被闪存应用程序接收并发回。

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

编辑:截至本文撰写时,Drupal6尚未完全发布AMHPHP,但无论如何它都被安装在网站上。使用DrupalSite库,我可以非常轻松地从Flash登录和退出网站,并且登录在Flash和HTML之间保持一致。

2 个答案:

答案 0 :(得分:1)

我对Flash并不十分熟悉,但是URLRequest对象是否从浏览器会话“继承”状态,包括用户登录cookie?如果没有,您需要使用手工构建的请求明确发送登录cookie,否则Drupal会认为它只是来自同一IP地址的其他Web浏览器。

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

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

答案 1 :(得分:0)

无法做到。

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