【问题标题】:Accessing variables from two different sessions?从两个不同的会话访问变量?
【发布时间】:2010-07-22 13:14:53
【问题描述】:

我已经集成了 WHMCS 和 Drupal。但是,当您访问 Drupal 并 print_r SESSION 时,您看到的信息与访问 WHMCS 页面时所看到的完全不同。所以,我的问题是,我如何从另一个访问一个会话?

我需要访问它,以查看用户是否已登录。

【问题讨论】:

  • 您是否有兴趣使用 WHMCS 的 Drupal 会话,反之亦然?
  • 我想从 Drupal 访问 WHMCS 会话(这样我就可以确定用户是否登录到 WHMCS)(这样我就可以在其他页面上显示或隐藏 Drupal 上的登录框)。跨度>

标签: php drupal session session-variables whmcs


【解决方案1】:

您将获得的值取决于php.ini 中的session.name 指令。如果您希望他们能够阅读彼此的内容,请设置相同的session.name

或者更确切地说,会话数据将根据 cookie 中与session.name 同名的标识符加载。默认为PHPSESSID,但您可以自行更改。

您可以在运行时使用ini_set()session_name() 进行设置。

【讨论】:

  • 当然,但session_name() 所做的只是更改该指令。见:svn.php.net/viewvc/php/php-src/branches/PHP_5_3/ext/session/…
  • 在 Drupal 的情况下,会话名称是通过代码设置的,而不是 php.ini 指令。
  • @Daniel Egeberg:Drupal 使用的会话名称与php.ini 中报告的会话名称不同; php.ini 不报告当前设置的会话名称。我认为 OP 遇到的问题是使用 WHMCS 读取从 Drupal 创建的会话,反之亦然。我删除了我的评论,因为我无法编辑它,并且它包含一个错字;因为这是唯一的评论,我想我可以做到。 :-)
  • @kiamlaluno:设置在php.ini中没关系。在执行session_start() 时,session.name 的名称决定了它。 session_name() 还可以获取 当前 会话名称。最重要的是它们需要以某种方式相同。
  • 我仍然很难过。即使我可以设置会话名称,您可以访问其他会话吗?
【解决方案2】:

Drupal 在引导期间通过session_set_save_handler() 注册自己的会话处理函数(drupal_bootstrap())。它还在conf_init() 中设置了自己的会话名称。

由于 Drupal 的处理程序,在使用标准 PHP 会话之前恢复 WHMCS 的会话名称将不起作用。 PHP 将使用 Drupal 的处理程序来打开、读取、写入等会话信息。您将得到的只是在 PHP 调用时从 sess_read() 返回的错误 Drupal 会话的数据。

读取 WHMCS 会话的一种方法是弄清楚它是如何存储的,并在不使用 PHP 的会话函数的情况下访问它。

另一种方法可能是撤消 Drupal 所做的(更改会话名称和注册处理程序)以恢复 PHP 会话函数的 默认 行为,读取 WHMCS 的会话并恢复 Drupal 的会话名称和处理程序。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-25
    相关资源
    最近更新 更多