了解ZF2中的会话管理器和Zend \ Authenticate

时间:2013-05-02 03:13:09

标签: php session zend-framework2 zend-auth zend-session

在登录操作中,我有以下代码:

public function login($sEmail, $sEncryptedPassword, $bIsClear = true)
{
    $manager = $this->getServiceLocator()->get('session_manager');
    $manager->start();

    Container::setDefaultManager($manager);

    $this->auth = new AuthenticationService();
    $this->auth->setStorage(new Session('FSP'));

    $dbAdapter = $this->getServiceLocator()->get('Zend\Db\Adapter\Adapter');
    $this->authAdapter = new AuthAdapter(
        $dbAdapter,
        'fsp_user',
        'email',
        'password'
    );

   $this->authAdapter
        ->setIdentity($sEmail)
        ->setCredential($sEncryptedPassword);

   $authAuthenticate = $this->auth->authenticate($this->authAdapter);

   if ($authAuthenticate->isValid()) {


        $user = $this->authAdapter->getResultRowObject();



        $storage = $this->auth->getStorage();

        $storage->write(
            array(
                'email' => $user->email,
                'first_name' => $user->first_name,
                'last_name' => $user->last_name,
                'id' => $user->id
            )
        );
   }

我对此代码有两个问题: 1)我将会话保存在数据库中,并在服务管理器中配置会话SaveHandler。我不知道一旦我使用Zend \ Authenticate我也应该使用会话管理器。在文档中说

  

“除非另有说明,否则Zend \ Authentication \ AuthenticationService   使用名为Zend \ Authentication \ Storage \ Session的存储类,其中,   反过来,使用Zend \ Session。“

所以我的第一个问题是:我可以仅使用Zend \ Authenticate配置sessionHandler,还是必须使用会话管理器?

2)我无法弄清楚会话存储在ZF中是如何工作的。登录后,会话数据不会保留在DB中。如果我正在进行一些调试,我会得到以下数据:

    $session = new Container("FSP");
    //this returns the session data 
    var_dump($session->getIterator());


  //this returns empty
    var_dump($this->auth->getStorage());


  //this returns null, but I do have a FSP named cookie with an Id, showing in Chrome's developer tool
    $cookie = $this->getServiceLocator()->get('request')->getHeaders()->get('cookie');
    $sessionId = $cookie->FSP;
    var_dump($sessionId);

但是,如果我正在对登录进行刷新(再次运行登录操作),则会在数据库中写入上一个会话中的数据,而不是当前数据中的数据。 所以第二个问题是,为什么会话数据在登录时没有持久存储在数据库中,在会话实例化过程的哪一步是创建会话ID的cookie?

0 个答案:

没有答案