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

Symfony PHP Discussion :

symfony2 - perte aléatoire de session utilisateurs


Sujet :

Symfony PHP

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mai 2014
    Messages : 8
    Points : 6
    Points
    6
    Par défaut symfony2 - perte aléatoire de session utilisateurs
    Salut à tous! Alors voila j'ai un problème sur un de mes projets symfony:

    Je perds régulièrement ma session et ce, de manière aléatoire, le plus souvent suite à des appels ajax.

    Y a-t-il une configuration spéciale pour empêcher les sessions users de se réinitialiser?

    Pour l'instant je ne vois pas quelles sources vous montrer pour aider, n'hésitez pas a me demander =)

  2. #2
    Membre expérimenté Avatar de nathieb
    Homme Profil pro
    DevOps
    Inscrit en
    Mai 2004
    Messages
    1 058
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : DevOps
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 058
    Points : 1 532
    Points
    1 532
    Par défaut session
    Bonjour,

    Je connais bien symfony 1.4, la version 2 est plus mystérieuse pour ma part.

    Quand ut fais des appels ajax, il faut que tu vérifies (PHP de base), que ton script PHP commence par session_start() (script appelé), si tu passes par symfony 2,
    il faut regarder dans cette voie.

    Olivier
    Architecte destructurant,
    be cool, be free

    Il nous reste Debian bien sûr

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mai 2014
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    ahh ouais pas bête! =)

    je cherche de ce coté et je te tiens au courant

  4. #4
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2009
    Messages : 875
    Points : 1 313
    Points
    1 313
    Par défaut
    Justement non, comme symfony2 est un framework, il gère bien sur l'appel de session et tu n'as pas a te préocupper de fermer ou on la session. Autant coder en php natif sinon...

    Comment utilise tu la session dans ton controlleur ajax?

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mai 2014
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    Je n'ai pas de contrôleur ajax à proprement parler, mais j'appelle des actions d'un contrôleur en ajax en ne touchant jamais a la session, ce que je fait n'a rien à voir :/


    voici mes actions
    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
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
     
    public function adminAddReservationAction($date = null){
            if (!$this->get('security.context')->isGranted('ROLE_MANAGE_MEETING_ROOMS') && !$this->get('security.context')->isGranted('ROLE_SUPER_ADMIN')) {
                throw new AccessDeniedHttpException('Vous ne disposez pas des droits nécéssaires pour accéder à cette partie de l\'administration');
            }
            $repository = $this->getDoctrine()->getManager()->getRepository('JCReservationsSallesBundle:Reservation');
     
            $reservation = new Reservation();
     
            if ($date != null) {
                $dateDebut = new \DateTime($date);
                $dateFin = new \DateTime($date);
                $reservation->setDebut($dateDebut);
                $reservation->setFin($dateFin);
            }
     
            $form = $this->createForm(new ReservationType, $reservation);
     
            $request = $this->get('request');
            if ($request->getMethod() == 'POST') {
                $form->bind($request);
     
                if ($form->isValid()) {
                    //enregistrement en base
                    $em = $this->getDoctrine()->getManager();
                    $em->persist($reservation);
                    $em->flush();
                }
            }
     
            return $this->render('JCReservationsSallesBundle:Reservation:adminReservationForm.html.twig', array(
            'modalTitle' => 'Créer une réservation',
            'form' => $form->createView()
            ));
        }
     
        public function adminEditReservationAction($id){
            if (!$this->get('security.context')->isGranted('ROLE_MANAGE_MEETING_ROOMS') && !$this->get('security.context')->isGranted('ROLE_SUPER_ADMIN')) {
                throw new AccessDeniedHttpException('Vous ne disposez pas des droits nécessaires pour accéder à cette partie de l\'administration');
            }
            $repository = $this->getDoctrine()->getManager()->getRepository('JCReservationsSallesBundle:Reservation');
     
            $reservation = $repository->findOneById($id);
     
            $form = $this->createForm(new ReservationType, $reservation);
     
            $request = $this->get('request');
            if ($request->getMethod() == 'POST') {
                $form->bind($request);
     
                if ($form->isValid()) {
                    $em = $this->getDoctrine()->getManager();
                    $em->persist($reservation);
                    $em->flush();
                }
            }
     
            return $this->render('JCReservationsSallesBundle:Reservation:adminReservationForm.html.twig', array(
            'modalTitle' => 'Modifier une réservation',
            'form' => $form->createView(),
            'id'=>$reservation->getId()
            ));
        }
     
        public function adminDeleteReservationAction($id, $confirm){
            if (!$this->get('security.context')->isGranted('ROLE_MANAGE_MEETING_ROOMS') && !$this->get('security.context')->isGranted('ROLE_SUPER_ADMIN')) {
                throw new AccessDeniedHttpException('Vous ne disposez pas des droits nécessaires pour accéder à cette partie de l\'administration');
            }
            $repository = $this->getDoctrine()->getManager()->getRepository('JCReservationsSallesBundle:Reservation');
     
            $reservation = $repository->findOneById($id);
     
            if(!$reservation){
                throw $this->createNotFoundException('La réservation n\'existe pas');
            }
     
            $request = $this->getRequest();
            if ($confirm == 'true') {
                if($request->isXmlHttpRequest()){
                    $em = $this->getDoctrine()->getManager();
                    $em->remove($reservation);
                    $em->flush();
                }
                return new Response('success');
            }else{
                return $this->render('JCReservationsSallesBundle:Reservation:adminDeleteReservation.html.twig', array(
                  'reservation' => $reservation
                ));
            }
     
     
        }
    et l'appel dans mes vues (j'utilise fullcalendar de jquery)
    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
    44
     
    dayClick: function(date, allDay, jsEvent, view) {
    		        var dateParsed;
    		        dateParsed = $.fullCalendar.formatDate( date, 'yyyy-MM-dd HH:mm:ss' );
    		        $.ajax({
     
    			        type: "GET",
    			        url: Routing.generate('admin_add_reservation', { 'date': dateParsed }),
    			        data: null,
    			        cache: false,
    			        success: function(data){
    			           $('#modalReservation').html(data);
    			        }
    			    }); 
     
    		        $('#modalReservation').modal('show');
     			}
            });
     
        	$('#modalEditOrDelete_EditButton').click(function(){
        		$.ajax({
    		        type: "GET",
    		        url: Routing.generate('admin_edit_reservation', { 'id': $('#idReservationEditOrDelete').val() }),
    		        cache: false,
    		        success: function(data){
    		           $('#modalReservation').html(data);
    		        },
        		});
    			$('#modalEditOrDelete').modal('hide');
        		$('#modalReservation').modal('show');
        	});
     
        	$('#modalEditOrDelete_DeleteButton').click(function(){
        		$.ajax({
    		        type: "GET",
    		        url: Routing.generate('admin_delete_reservation', { 'id': $('#idReservationEditOrDelete').val() }),
    		        cache: false,
    		        success: function(data){
    		           $('#modalReservation').html(data);
    		        },
        		});
    			$('#modalEditOrDelete').modal('hide');
        		$('#modalReservation').modal('show');
        	});
    Je n'utilise peut être pas la bonne méthode...

  6. #6
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2009
    Messages : 875
    Points : 1 313
    Points
    1 313
    Par défaut
    Un peu d'info de la doc http://symfony.com/fr/doc/current/co...-de-la-session

    Les infos sur la configuration du fichier config http://symfony.com/fr/doc/current/re...k.html#session

    Si c'est pas lié au code, je pourrais pas trop t'aider, a mon avis ça peut venir de ta conf app/config.yml si tu l'as modifiée, sinon ton php.ini (mais j'm'y connais pas trop perso)

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mai 2014
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    oui j'ai déjà visité ces pages et modifié mon config.yml avec les infos suivantes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    session:
            cookie_lifetime:          28800 #8 heures
            cookie_httponly:         false
    pourtant ma session est détruite par moments (et quasi systématiquement lors de l'appel ajax pour supprimer une entrée en base)

    appel ajax pour la suppression
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    $('#submitButton').click(function(){
    	var url = Routing.generate('admin_delete_reservation', { id: {{ reservation.id }}, confirm: 'true' });
        $.ajax({
            type: "POST",
            url: url,
            success: function(msg){
                $('#modalReservation').modal('hide');
            }
        });
        return false;
     
    });

  8. #8
    Membre expérimenté Avatar de nathieb
    Homme Profil pro
    DevOps
    Inscrit en
    Mai 2004
    Messages
    1 058
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : DevOps
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 058
    Points : 1 532
    Points
    1 532
    Par défaut le framework
    Bonjour,

    certes le framework, doit gérer la session a ta place, mais il y a moyen de faire afficher cette session.

    http://jondev.net/articles/Reasons_w...always_persist

    Dans ton exemple il manque le retour de la fonction ???
    celle qui renvoie l'affichage ou la réponse à ton GET ajax

    Olivier
    Architecte destructurant,
    be cool, be free

    Il nous reste Debian bien sûr

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mai 2014
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    J'ai aussi déjà visité cette page =) (d'où mes lignes dans le config.yml)

    Pourtant le problème persiste. :/

  10. #10
    Membre expérimenté Avatar de nathieb
    Homme Profil pro
    DevOps
    Inscrit en
    Mai 2004
    Messages
    1 058
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : DevOps
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 058
    Points : 1 532
    Points
    1 532
    Par défaut nouvelle piste
    Bonjour, apparemment tu utilises un autre bundle
    cela ne viendrait pas du partage de session entre 2 bundles ??

    Désolé je ne fais que des supputations

    olivier
    Architecte destructurant,
    be cool, be free

    Il nous reste Debian bien sûr

Discussions similaires

  1. [1.x] Perte de session utilisateur
    Par stephdemars dans le forum Symfony
    Réponses: 5
    Dernier message: 14/12/2010, 13h18
  2. [PHP 5.2] Perte immédiate de session aléatoire
    Par Dark Cid dans le forum Langage
    Réponses: 1
    Dernier message: 08/10/2010, 09h46
  3. nom session utilisateur Windows
    Par snipes dans le forum Applets
    Réponses: 3
    Dernier message: 21/04/2006, 14h22
  4. Nom session utilisateur windows
    Par snipes dans le forum Windows
    Réponses: 1
    Dernier message: 20/04/2006, 16h17
  5. Liste session utilisateur
    Par trax44 dans le forum Langage
    Réponses: 1
    Dernier message: 18/04/2006, 12h42

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