[PHP/ZF] Sessie data wordt niet opgeslagen via Doctrine

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • Wizz15
  • Registratie: Januari 2004
  • Laatst online: 26-10-2022
Beste tweakers,

Ik werk voor een project met Zend Framework en eigen sessie handlers. Voorheen werkte het opslaan van sessie data via Zend_Db_Table (wel via een eigen handler, dus niet Zend_Session_SaveHandler_Db), maar we zijn bezig met de overstap naar Doctrine voor de database transacties.

Sinds ik in de sessie handler Doctrine code heb opgenomen werkt het opslaan van data in de sessie niet meer. Als ik in de database kijk, zie ik dat er keurig een record wordt aangemaakt met het juiste sessie id en de modified en lifetime timestamps. Het data veld blijft leeg omdat er bij het openen van een sessie nog geen data is.

Nu probeer ik in te loggen in de applicatie waarbij er dus gegevens naar de sessie worden geschreven indien de username en password correct zijn. Als ik direct na het inloggen (voordat de user wordt geredirect) de inhoud van de sessie print, dan zie ik dat deze gevuld wordt met de correcte gegevens. Als ik echter in de database kijk, dan zie ik dat het data veld gewoon leeg blijft. Na een redirect is de user dan ook niet ingelogd.

Ik heb in de sessie handler al 'Zend_Session::writeClose(true);' opgenomen in de destructor van dat object, maar dit mag niet baten. Als ik die regel weg laat krijg ik errors van Doctrine dat hij verschillende classes niet kan vinden, waarschijnlijk omdat hij naar de sessie probeert te schrijven op het moment dat de Doctrine objecten niet meer beschikbaar zijn. Het vreemde is dat ik aan mijn sessie handler niets heb aangepast, behalve de Zend_Db_Table code vervangen met Doctrine code.

Het aanmaken van rijen in de sessie tabel in de database werkt dus gewoon, maar het updaten of wegschrijven van data naar die rijen gebeurt gewoonweg niet. Ik krijg ook geen notices of exceptions en mijn error_reporting staat op E_ALL|E_STRICT.

Voor de volledigheid nog even de inhoud van de write() en read() methods van mijn handler:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
/**
 * Read from the session
 *
 * @param string $id
 * @return string
 */
public function read($id)
{
    $this->_session = $this->getSessionData($id); // haalt een record op als deze bestaat
    if(!$this->_session)
    {
        $this->_session = new Session(); // doctrine model
        $this->_session->id = $id;
        $this->_session->lifetime = 3600 * 24 * 17;
        $this->_session->data = '';
    }
    return $this->_session->data;
 }

/**
 * Write data to the session
 *
 * @param string $id
 * @param string $data
 * @return boolean
 */
public function write($id, $data)
{
    $this->_session->data = $data;
    $this->_session->modified = time();
    $this->_session->save();
    return true;
}

PSN: RikBruil | BFBC2 stats