【问题标题】:Sessions and custom ajax in Drupal 6Drupal 6 中的会话和自定义 ajax
【发布时间】:2011-05-07 20:56:42
【问题描述】:

我正在为 Drupal 6 开发一个自定义模块。我遇到了会话变量和带有 ajax 功能的自定义代码的问题。

如何从由 ajax 请求触发的后端 php 脚本访问 Drupal 创建的会话?

例如在模块的 .module 文件中,我将自定义 php 对象添加到 $_SESSION 变量。我可以在 .module 文件中访问它,即使它不是同一个页面。当我执行 jQuery ajax 请求并尝试访问 $_SESSION 上不可用的对象时。似乎整个会话都消失了,并且 $_SESSION 变量不存在。调用 session_start() 将创建新会话和空白 $_SESSION 数组。

我已经被这个问题困扰了两天。我只想从 ajax 请求的后端脚本访问原始会话。此外,我无法访问全局变量,例如$base_url 或 $user。

提前致谢。

【问题讨论】:

  • 您的 Ajax 调用是否通过 Drupal 系统进行?听起来您可能正在为他们绕过 Drupal,这只是在自找麻烦。
  • 不,它们没有通过 Drupal 的 ajax 系统处理,因为我无法让它工作。所有其他 ajax 请求都像往常一样工作,但会话失败。有没有办法从自定义 ajax 及其后端脚本访问会话?我确实在请求中得到了正确的会话名称和 ID,但是在 session_start 之前用它命名会话只会创建一个具有相同名称和 ID 的重复会话。虽然它们有不同的域(drupal 有 .domain.com,而新的只有 domain.com)。此外,drupal session 的过期时间是日期时间,而 new 只是“会话”。
  • 好吧,你问错问题了——你应该问为什么你的 ajax 调用在 Drupal 中不起作用。而不是让 ajax 调用在 Drupal 外部路由并询问如何集成两个会话。

标签: ajax drupal session drupal-6


【解决方案1】:

这里只是总结一下cmets。

Drupal 有一个很棒的 ajax 框架。一旦你开始工作,它就会为你处理很多困难的事情。

如果您考虑使用 Drupal,所有会话处理都将为您完成。

如果您问其他关于如何使其工作的问题,我相信我们会提供帮助。

【讨论】:

  • 好的,谢谢您的建议。我再试一次,尝试让 Drupal 自己的 ajax 框架工作。起初,我很沮丧,我想尝试一条捷径。我发现了一些很有前途的教程。如果我遇到一些我无法克服的问题,我会发布另一个(愚蠢的)问题。
  • 不要自责,一开始很难,而且文档也不是很好。 D7 的 ajax 框架更好,但在 fapi 之外更难使用。
【解决方案2】:

感谢所有 cmets 和帮助。在尝试了一些说明、教程和博客文章之后,我设法让 Drupal 的内置 ajax 框架运行,并且包括会话在内的所有内容都可以很好地处理请求。我了解到,对于 Drupal,需要使用 Drupal 而不是“外部”解决方案作为插件来完成。

来自 Joomla 和 Microsoft 开发 Drupal 的逻辑大多是痛苦的* :D

【讨论】:

    【解决方案3】:
    require_once './includes/bootstrap.inc';
    drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL); // This makes all Drupal functionality available to my script
    

    这对我有用(脚本在根目录中)。

    【讨论】:

      【解决方案4】:

      在 D7 中,我必须在设置 $_SESSION 变量之前直接调用 drupal_session_start()

      drupal_session_start();
      $_SESSION['type'] = "cat1";
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-15
        相关资源
        最近更新 更多