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

Langage PHP Discussion :

[Sécurité] Progress bar en ajax : problème de session_start


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 127
    Par défaut [Sécurité] Progress bar en ajax : problème de session_start
    Bonjour à tous !

    Bon je me suis pris la tête une journée sur ce problème (déjà parce qu'au début je ne comprenais pas d'où ça venait).
    J'ai une page qui appelle en ajax un script (disons "script1") TRES LONG (genre 10min facile). J'avais donc pensé à l'idée d'une sorte de progress bar en ajax qui permettrait à l'utilisateur de savoir où en est le traitement de la migration des données.
    Pour cela, dans script1 je mets à jours des variables en session, et je les récupère dans le "script2" que j'appelle toutes les secondes (donc plusieurs ajax en même temps).

    Le souci c'est que bien sûr j'ai fait un ptit session_start() dans chaque script, mais dans le 2ème ça foire. Jme suis dit (au bout d'un long moment de réflexion ) "ok, la session doit déjà être démarrée, donc je vire l'appel à session_start() mais je garde mes appels à $_SESSION['progressbar_curval'] (entre autres).

    Seul souci, ces valeurs ne sont pas définies (alors qu'elles le sont, enfin bref), donc souci de session... Sauf que j'ai pas le droit de lancer session_start().

    Ma solution (temporaire je l'espère !!!) est d'écrire les variables dans un fichier dans script1, et lire ce fichier dans script2 (j'espère que les "protections" de lecture se font toutes seules, car je n'en prends aucune !)

    Quelqu'un aurait-il la solution pour bénéficier de ces variables sans passer par un fichier ? (j'avais pensé à un tableau encore plus "global" que $_SESSION, mais pas trouvé).

    Je suis en PHP 4.4 je crois.

    Merci à vous

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 127
    Par défaut
    Up !

    Après plusieurs recherches j'ai trouvé qu'il était possible de modifier le gestionnaire de sessions de PHP.... 5 ! Donc inutile dans mon cas.

    En gros 3 solutions :
    - soit j'arrive à faire marcher le $_SESSION (mmmh gros doutes)
    - soit j'utilise un fichier en espérant qu'il ne puisse pas y avoir de pb de lecture/écriture (genre pile au moment où je le vide pour le récrire dans script1, ben paf! je le lis dans script2 )
    - soit j'utilise la base de données (je sais même pas si je gagnerais en temps d'exécution et en sécurité, mais ça ferait des requêtes supplémentaires pour pas grand chose)

    Merci de votre aide

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 11
    Par défaut
    Salut,

    J'ai jamais essayer de faire se genre de chose mais c'est assez interressant.

    Je pense que ton idée avec les sessions devrait marcher mais la encore je ne peut rien dire dessus sans le code.

    Par contre sur les deux autres solutions : c'est clair qu'il vaut mieux utiliser la base : c'est plus rapide et vu le genre de script c'est important.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 127
    Par défaut
    Nan sessions j'arrive pas à les faire marcher correctement ! (et j'attends qu'un gourou de PHP donne des idées :p )

    Oui je vais ptet essayer la base pour voir, en espérant que ça ralentisse pas trop le process.
    D'ailleurs la base ou le fichier ça part en vrille si ya plusieurs personnes qui utilisent la progress bar en même temps tiens, j'y avais pas pensé !
    Nan faudrait vraiment arriver à faire marcher les sessions... Ou alors utiliser un unique id par fichier/record de base si on utilise l'une ou l'autre de ces méthodes alternatives.

    Gourous de PHP, pliz help

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 127
    Par défaut
    Bon, toujours solution temporaire : j'utilise les fichiers, dont le nom contient le session_id() fourni depuis la page HTML de "départ".

    J'ai retenté d'appeler session_start() dans les deux fichiers PHP appelés en Ajax, mais rien à faire, le script2 (celui qui est rapide, lancé toutes les secondes, et qui retourne la valeur courante de la progress bar) attend bêtement que le script1 ait finit pour retourner

    Besoin d'un coup de main des roxxor PHP sur ce coup-là

  6. #6
    Rédacteur
    Avatar de marcha
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2003
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 571
    Par défaut
    Salut,

    J'ai fait quelques test avec les sessions (d'habitude j'utilise la db pour ça)

    Alors ma conclusion est la suivante (si qqn peut confirmer c'est mieux)

    Lorsque deux requêtes provenant d'un même client appellent deux pages
    php différentes avec toute deux un session_start, la deuxième requête
    attendra que la permière aie terminé.

    Alors j'ai tenté le session_write_close() qui permet de sauver et fermer
    la session, il faut ensuite la rouvrir pour pouvoir à nouveau modifier, voici mon
    test:

    long.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     
    	session_start();
    	$_SESSION['progress'] = 0;
    	session_write_close();
     
    	for($i=0;$i<50;$i++) {
    		sleep(1);
    		session_start();
    		$_SESSION['progress']++;
    		session_write_close();
    	}
     
    	echo 'done';
    court.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    	session_start();
     
    	echo $_SESSION['progress'];
    	echo "<br />";
    	echo time();
    J'ai pu faire une observation qu'il faudrait confirmer:

    Si la requête sur court.php survient quand la session est ouverte
    sur long.php j'ai peur qu'il y aie un temps de réponse particulièrement
    plus long (c'était peut-être un lag sur mon serveur durant mon test)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème actualisation progress bar
    Par saket2114 dans le forum EDT/SwingWorker
    Réponses: 4
    Dernier message: 29/10/2009, 18h42
  2. probléme du composant progress bar
    Par ouadie99 dans le forum Windows Forms
    Réponses: 4
    Dernier message: 06/03/2008, 14h43
  3. [Patterns]Séparation IHM <-> Noyau : Problême de progress bar ?
    Par Muetdhiver dans le forum Design Patterns
    Réponses: 8
    Dernier message: 18/09/2007, 22h28
  4. Réponses: 26
    Dernier message: 16/08/2007, 16h37
  5. Progress bar problème
    Par neyutran dans le forum MFC
    Réponses: 3
    Dernier message: 03/05/2007, 18h09

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