在同一域上共享Zend和Pure PHP之间的会话

时间:2013-04-04 15:18:47

标签: php zend-framework session

我有两个这样的文件夹:

  1. /公共/ zend_app /
  2. /公共/ pure_php /
  3. Drupal已经安装在root中。

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

    我检查 session_id session_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()   46:C:\ wamp \ www \ zend_app \ library \ Zend \ Session.php)。

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

1 个答案:

答案 0 :(得分: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"