【问题标题】:Share Sessions Between Zend and Pure PHP on Same Domain在同一域上的 Zend 和纯 PHP 之间共享会话
【发布时间】:2013-04-04 15:18:47
【问题描述】:

我有两个这样的文件夹:

  1. /public/zend_app/
  2. /public/pure_php/

并且 Drupal 已经安装在根目录下。

现在,我想在第二个路径中创建一个会话并在 zend 中使用它。 我尝试了一些不同的方法来做到这一点,但结果是失败!

我检查了 session_idsession_save_path 两者现在是相同的。

在第二个文件夹中我有这个:

session_start();
session_id($_COOKIE[PHPSESSID]);
$_SESSION[user] = 123;

第一个:

$someNamespace = new Zend_Session_Namespace('ns');
//......

session_id($_COOKIE[PHPSESSID]);
print_r($_SESSION);

但它返回空数组!

我也在第二个文件夹中试过这个:

set_include_path ( $zend_path );
include_once $zend_path . '/Session.php';
$user = new Zend_Session_Namespace('user');

但是我得到了这个错误:(我无法阻止运行 session_start 来逃避这个错误)

Zend_Session_Exception: 会话已经被 Zend_Session::start() 中的 session.auto-start 或 session_start() (行 C:\wamp\www\zend_app\library\Zend\Session.php 的 462)。

现在我的问题是如何与 zend 共享它? Zend 是否使用特殊处理程序?如何在纯 php 代码中使用它?

【问题讨论】:

  • 删除session_id 调用,它们不应该在那里。您的数组索引也应该被引用,例如$_SESSION['user']。我建议在访问您的 PHP 应用程序后检查会话文件中是否确实包含任何内容。
  • 我检查过了,没用。当我尝试“echo session_id();”时它返回不同的值

标签: php zend-framework session


【解决方案1】:

看看:

http://framework.zend.com/manual/1.12/en/zend.session.basic_usage.html

$myNamespace = new Zend_Session_Namespace('myNamespace');

// $myNamespace corresponds to $_SESSION['myNamespace']

去掉session_id(),你不需要给PHP cookie,它会自动处理。

我刚刚在 ZF 控制器中尝试过这个:

$session = new Zend_Session_Namespace('ns');
$session->foo = "bar";
print_r($_SESSION);

这就是我得到的结果:

Array
(
        [ns] => Array
        (
            [foo] => bar
        )
}

所以我现在可以使用纯 PHP 访问 $_SESSION['ns']['foo']。我也可以在纯 PHP 中设置值:

$_SESSION['ns']['baz'] = "quz";

以及后来在 ZF 中的访问:

echo $session->baz; // gives me "quz"

【讨论】:

  • 您还需要确保session nameconfigured in the ZF app 相同
  • 我想要反之亦然,但是这段代码对我不起作用,我认为问题可能是由安装在 root 中的 drupal cms 引起的......
猜你喜欢
  • 2014-04-16
  • 2016-12-27
  • 2023-03-09
  • 1970-01-01
  • 2014-07-10
  • 1970-01-01
  • 2011-12-20
  • 2017-04-08
  • 1970-01-01
相关资源
最近更新 更多