Zend_Session après authentification
Bonjour,
Désespéré après des heures de recherche sur google, je me tourne vers vous pour exposer mon problème :
Je développe actuellement un site sous Zend Framework, et je travaille sur le module d'authentification, très basique :
- un formulaire de login (view : login.phtml)
- un memberController avec une action processLogin (vers laquel le formulaire redirige)
- un model member, qui représente ma table member en base de donnée mysql
- la table de la base de donnée dispore de 5 champs (id, email, pass, nom, prenom)
Mon problème se situe au niveau du Controller, dans l'action processLogin :
Code:
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 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
| <?php
require_once 'models/Member.php';
class MemberController extends Zend_Controller_Action
{
//Default action - not implemented
public function indexAction()
{
}
//ProcessLogin (called when the login form is validated)
public function processLoginAction()
{
//Get posted informations : the login (email) and password
//Filter this informations for security issues
$emailAddress = Zend_Filter::get($this->getRequest()->getPost('emailAddress'), 'StripTags');
$passwordFilter = new Zend_Filter();
$passwordFilter->addFilter(new Zend_Filter_HtmlEntities())
->addFilter(new Zend_Filter_StripTags());
$userPassword = $passwordFilter->filter($this->getRequest()->getPost('userPassword'), 'StripTags');
//Trying to log on with the given email adress and password
$memberId=Member::login($emailAddress,$userPassword);
//If the login success, we get a numeric member id
//So we create a session and we stock informations about the member in it
//Then we notify the user of the login success and we redirect him
if (is_numeric($memberId))
{
$memberSession = new Zend_Session_Namespace('member');
$memberSession->member = new Member($memberId);
$this->_helper->flashMessenger->addMessage("Welcome");//" {$memberSession->member->firstName}.");
$this->_redirect('/index/index');
}
//Else we just notify the user of the error and we redirect him to the login
else
{
$this->_helper->flashMessenger->addMessage("I'm sorry but there was a problem logging you in. Please try again.");
$this->_redirect('/index/login');
}
}
} |
Le login, qui utilise Zend_Auth, se passe sans problème, mais au moment où je veux stocker les informations du membre dans la session, je me mange une exception :
Citation:
an unexpected error occured.
Unexpected Exception: Zend_Session::start() - fopen(Member.php) [function.fopen]: failed to open stream: No such file or directory
#0 C:\wamp\www\EasyDon\library\Zend\Session\Namespace.php(116): Zend_Session::start(true)
#1 C:\wamp\www\EasyDon\library\Zend\Controller\Action\Helper\FlashMessenger.php(73): Zend_Session_Namespace->__construct('FlashMessenger')
#2 C:\wamp\www\EasyDon\library\Zend\Controller\Action\HelperBroker.php(330): Zend_Controller_Action_Helper_FlashMessenger->__construct()
#3 C:\wamp\www\EasyDon\library\Zend\Controller\Action\HelperBroker.php(191): Zend_Controller_Action_HelperBroker::_loadHelper('FlashMessenger')
#4 C:\wamp\www\EasyDon\application\controllers\IndexController.php(9): Zend_Controller_Action_HelperBroker->getHelper('flashMessenger')
#5 C:\wamp\www\EasyDon\library\Zend\Controller\Action.php(499): IndexController->indexAction()
#6 C:\wamp\www\EasyDon\library\Zend\Controller\Dispatcher\Standard.php(242): Zend_Controller_Action->dispatch('indexAction')
#7 C:\wamp\www\EasyDon\library\Zend\Controller\Front.php(927): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http))
#8 C:\wamp\www\EasyDon\public\index.php(36): Zend_Controller_Front->dispatch()
#9 {main}
Ce qui nous ramène aux 2 lignes suivantes :
Code:
1 2
| $memberSession = new Zend_Session_Namespace('member');
$memberSession->member = new Member($memberId); |
Si je crée juste le namespace, pas de problème.
Si je créer juste le member, pas de problème.
Si j'accède aux attributs du member, pas de problème.
Si j'ajoute une variable texte dans la session, aucun problème !
Ex :
Code:
1 2
| $memberSession = new Zend_Session_Namespace('member');
$memberSession->member = "toto"; |
Ce qui m'amène à penser que mon problème est que je veux stocker un objet dans la session. Serais-ce imposible ?
Je ne pense pas, mais je n'ai pas la solution pour le faire ... Et c'est là que je compte sur vous :king:
En vous remerciant par avance,
Charles