IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Autres composants PHP Discussion :

_redirect et gestion du cache navigateur


Sujet :

Autres composants PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 6
    Par défaut _redirect et gestion du cache navigateur
    Bonjour à tous,

    J'ai un gros problème avec $this->_redirect.

    J'ai un formulaire de connexion dans une action 'connexionAction', une fois qu'on a saisie ses identifiants l'envoi du formulaire appel l'action verifconnexionAction qui va vérifier si la combinaison login/mot de passe est bonne.
    Si les identifiants sont connus je redirige à l'aide de $this->_redirect vers une action indexconnecteAction ( $this->_redirect('/moncontrolleur/indexconnecte'); )

    Cette dernière est chargée d'afficher la page d'accueil une fois qu'on est connecté ou de redirigé vers une autre action si on tente d'y accéder sans être loggé

    Le problème survient ici, en effet lorsque je tente d'accéder à la page d'accueil connecté (les identifiants sont bons) je suis quand même redirigé vers ma page non loggé.
    J'arrive à résoudre le problème de 2 manières différentes :
    - soit en supprimant le cache du navigateur, je recharge et là il voit bien que je suis loggé et m'affiche donc la bonne page.
    - soit en affichant un var_dump de n'importe quel variable ou même texte en premier dans mon action 'indexconnecteAction', si je le met et je recharge ma page s'affiche correctement.

    Je précise que ce bug survient uniquement sous Firefox.


    Et j'ai un autre problème toujours avec ce _redirect :

    J'ai une autocompletion avec ZendX_JQuery_Form_Element_Autocomplete.
    Ma saisie fonctionne parfaitement, mais lorsque j'envoi mon formulaire vers une action qui va traiter les données, puis que je redirige (si tout est ok) sur l'action qui affiche mon autocomplete (j'ai besoin de réafficher le formulaire après la saisie) j'ai un gros bug:

    - Sous chrome: mon champs est bien mis à jour à l'écran mais l'autocomplete ne fonctionne plus, dans la console, j'ai ce message qui apparait : Uncaught TypeError: Object #<Object> has no method 'autocomplete'
    - Sous firefox: mon champs n'est pas mis à jour à l'écran mais l'autocomplete fonctionne toujours

    Et bien évidemment si je vide le cache tout fonctionne parfaitement.

    Et pour info dans mon init j'ai mis ceci :
    $this->view->headMeta()->appendHttpEquiv('expires','Wed, 26 Feb 1997 08:21:57 GMT')
    ->appendHttpEquiv('pragma', 'no-cache')
    ->appendHttpEquiv('Cache-Control', 'no-cache');
    Donc logiquement pas de cache de généré pour cette page...

    Si quelqu'un a déjà eu ce genre de problème ça m'aiderait bien car là je bloque.

    Merci d'avance.

  2. #2
    Membre émérite
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2009
    Messages
    736
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2009
    Messages : 736
    Par défaut
    Peut tu afficher le code.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 6
    Par défaut
    Pas de problème, voici mon action qui va me permettre de me connecter :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    	public function connexionAction(){
    		if($this->_request->isPost()){	
    			$request = $this->getRequest();
     
    			//UTILISATION D'UN FILTRE PERMETTANT DE SUPPRIMER TOUTES LES BALISES HTML ET PHP
    			$f = new Zend_Filter_StripTags();
    			$fl_login = $f->filter($request->getPost('fl_login'));
    			$fl_password = $f->filter($request->getPost('fl_password'));			
    			$fl_souvenir = $f->filter($request->getPost('fl_souvenir'));
    			$f = NULL;
     
    			if($fl_login != '' && $fl_password != ''){
    				$comptePerso = new Application_Espaceperso_Model_ComptePerso();
    				$id_login = $comptePerso->login($fl_login, $fl_password, true);
    				if($id_login){
    					//CRÉÉ LA SESSION DANS LE ZEND_REGISTRY ET REDIRIGE VERS L'ACTION D'ACCUEIL DU COMPTE PERSO					
    					if($fl_souvenir == '1'){
    						$session_login_expire = $this->session_login;
    						//SI LA PERSONNE SOUHAITE RESTER CONNECTÉ ON MODIFIE LA DURÉE D'EXPIRATION DE L'ESPACE DE NOM (1 SEMAINE)
    						$session_login_expire->setExpirationSeconds(60*60*24*7);
    					}
     
    					$this->session_login->id_login = $id_login;
                                           $this->session_flag = true;
    					$this->_redirect('espaceperso/espaceperso/accueilconnecte');				
    				}
    				else{
    					//RETOURNE UNE ERREUR 'IDENTIFIANT INCONNU'
    					$msg_error = array('error_form_cnx' => 'La combinaison email et mot de passe est incorrectes.');
    					$this->_forward('accueilnonconnecte', NULL, NULL, $msg_error);
    				}				
    			}
    			else{
    				//RETOURNE UNE ERREUR 'UN DES CHAMPS N'A PAS ÉTÉ SAISIE'
    				$msg_error = array('error_form_cnx' => 'Au moins un des champs n\'a pas été renseigné, vous devez indiquer votre identifiant et votre mot de passe.');
    				$this->_forward('accueilnonconnecte', NULL, NULL, $msg_error);
    			}
    		}
    		else{
    			if($this->session_flag) $this->_redirect('espaceperso/espaceperso/accueilconnecte');
    			else $this->_redirect('espaceperso/espaceperso/accueilnonconnecte');
    		}
    	}
    Mon action accueilconnect (qui va afficher l'accueil avec l'autocompletion une fois connecté)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    	public function accueilconnecteAction(){		
    		if($this->session_flag === false){
    			$this->_redirect('espaceperso/espaceperso/accueilnonconnecte');
    		}
    		else{
    			//j'affiche la vue accueil de l'epsace perso
    			//On récupère $annuaire_zone_intitule grâce à un modèle
    				$array = array('AFFICHAGE_DONNEES_INTITULE_ZONE' => $annuaire_zone_intitule
    						);
    				$this->view->assign($array);
     
     
     
    			//ON GÉNÈRE LE CHAMP POUR L'AUTOCOMPLETION SUR UN CHANGEMENT DE ZONE
    			//CETTE AUTOCOMPLETION APPELERA L'ACTION ZONEAUTOCOMPLETE QUI VA RETOURNER L'INTITULÉ DE LA ZONE LA PLUS PROCHE EN FONCTION DE LA SAISIE UTILISATEUR
    			$this->view->autocompleteElement = new ZendX_JQuery_Form_Element_Autocomplete('ac');
    			$this->view->autocompleteElement->setLabel('Changer mon dans l\'coin');
    			$this->view->autocompleteElement->setJQueryParam('source', '/espaceperso/espaceperso/zoneautocomplete');
    			$this->view->autocompleteElement->setJQueryParam('minLength', 3);
    		}
    	}
    C'est donc une fois qu'on se connecte et qu'on est redirigé vers accueilconnecte que le problème survient (la première fois qu'on se connecte)

    Et pour mon 2ème problème :

    L'action qui me génère le résultat de mon autocompletion :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    	//GÉNÉRATION D'UN TABLEAU JSON EN FONCTION DE LA SAISIE UTILISATEUR PERMETTANT D'ENRICHIR L'AUTOCOMPLETION
    	public function zoneautocompleteAction(){
                    //Traitement qui vont me générer un resultat : $results
    		$this->_helper->json(array_values($results));
    	}

    L'action qui est appelé lors de l'envoi du form contenant l'autocompletion :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    	public function changezoneAction(){
    		if(!$this->session_flag){
    			$this->_redirect('espaceperso/espaceperso/accueilconnecte');
    		}
    		elseif($this->_request->isPost()){
    			$request = $this->getRequest();
    			$f = new Zend_Filter_StripTags();
    			$change_zone = $f->filter($request->getPost('ac'));
    			$f = NULL;
     
    			//TESTER SI LE RÉSULTAT A BIEN ETE SAISIE
    			if($change_zone != NULL && $change_zone != ''){
     
    				//JE MET A JOUR MA BDD AVEC L'ENREGISTREMENT QUI VIENT D'ETRE SAISIE			
     
    				$this->_helper->viewRenderer->setNoRender(true);
     
    				//on redirige vers l'accueil
    				$url = '/espaceperso/espaceperso/accueilconnecte';
    				// $this->_redirector->gotoUrlAndExit($url);
    				$this->_redirect($url);
    			}
    			else{
    				//RETOURNE UNE ERREUR 'UN DES CHAMPS N'A PAS ÉTÉ SAISIE'
    				$msg_error['error_form_change_zone'] = 'Vous devez choisir une zone.';
    				$this->_forward('accueilconnecte', NULL, NULL, $msg_error);
    			}
    		}
    		else{
    			//RETOURNE UNE ERREUR 'UN DES CHAMPS N'A PAS ÉTÉ SAISIE'
    			$msg_error['error_form_change_zone'] = 'Un probl&egrave;me est survenue.';
    			$this->_forward('accueilconnecte', NULL, NULL, $msg_error);
    		}
    	}
    Et c'est ici que mon 2ème problème survient, lorsque je valide mon formulaire, j'arrive sur changezoneAction, qui me redirige ensuite sur mon accueilconnecte et ici sur les différents navigateurs ça plante

  4. #4
    Membre Expert
    Avatar de 5h4rk
    Homme Profil pro
    CTO at TabMo
    Inscrit en
    Février 2011
    Messages
    813
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : CTO at TabMo
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2011
    Messages : 813
    Par défaut
    Bonjour,
    Tu es sur Firefox 12 ?
    Si c'est le cas c'est normal, il y a un soucis au niveau de leur cache.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 6
    Par défaut
    Même avec chrome j'ai ce genre de problème

Discussions similaires

  1. Gestion du cache d'un ResulSet
    Par skunkies dans le forum JDBC
    Réponses: 1
    Dernier message: 30/10/2006, 18h12
  2. désactiver cache navigateur pour pages JSP/Tomcat 5.5
    Par iubito dans le forum Tomcat et TomEE
    Réponses: 3
    Dernier message: 24/03/2006, 17h50
  3. [Sécurité] Gestion du cache / cookies
    Par dug dans le forum Langage
    Réponses: 4
    Dernier message: 25/01/2006, 21h17
  4. chargement pages php + cache navigateur
    Par grinder59 dans le forum Langage
    Réponses: 6
    Dernier message: 06/10/2005, 14h44
  5. [Xml][Memoire] gestion du cache
    Par tatou42 dans le forum Format d'échange (XML, JSON...)
    Réponses: 11
    Dernier message: 21/09/2005, 17h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo