1

ログイン アクションでは、次のコードを使用しています。

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
            )
        );
   }

このコードには 2 つの問題があります。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);

ただし、ログインで更新を行っている場合 (ログイン アクションが再度実行されます)、現在のセッションのデータではなく、前のセッションのデータが DB に書き込まれます。2 番目の質問は、ログイン時にセッション データがデータベースに保持されないのはなぜで、セッション インスタンス化プロセスのどのステップでセッション ID を持つ Cookie が作成されるのかということです。

4

0 に答える 0