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

Web & réseau Delphi Discussion :

TIdHTTPServer : prbl de session ou de programmation


Sujet :

Web & réseau Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 131
    Par défaut TIdHTTPServer : prbl de session ou de programmation
    Bonjour,

    J'utilise Delphi 10 Seattle et le composant TIdHTTPServer pour créer une application qui tourne sur un serveur sous IIS -> jusque là pas de souci
    Mon problème est le suivant :
    - si plusieurs personnes lancent le module web via le lien http -> les variables que j'utilise dans le programme se mélangent.
    C'est-à-dire :
    - A l'init du module web, j'initialise mes variables à 0
    - 2 personnes se connectent en même temps et voit à l'écran une case pour saisir une variable
    - la 1er personne modifie la variable (de 0, on passe à 5 par exemple) puis clique sur un bouton pour afficher le message : on obtient "variable à 5"
    - la 2e personne ne modifie pas la variable et la laisse à 0 puis clique sur un bouton pour afficher le message : on obtient aussi "variable à 5"

    Pourtant, j'initialise bien à 0 la variables

    Alors, soit je m'y perds dans la fonction de faire, soit il manque quelque chose dans le paramétrage de IIS.

    J'aimerais avoir de l'aide car je planche dessus depuis pas mal de temps.

    Merci d'avance pour votre aide :-)

    Cordialement

  2. #2
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 089
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 089
    Par défaut
    Sans compter que chaque requête pouvant être dans un thread séparé, il pourrait y avoir des accès concurrentiels lors du gestionnaire du OnCommandGet.

    Dans le programme, il faut gérer des variables propres à chaque session, un TDictionnary<string, TSessionData> serait tout à fait utilisable protégé pour la lecture et l'ajout par une TCriticalSection (ou un MREWS mais c'est un peu plus délicat)

    TIdHTTPServer d'ailleurs, à quoi sert IIS ?
    c'est justement pour faire un Server Web autonome pas besoin de IIS ou Apache, idéal pour gérer un serveur REST
    Cela complique nettement lorsqu'il faut gérer une session, cookie et tout le bazar du HTTPS avec un utilisateur identifié\authentifié.
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 131
    Par défaut
    Bonjour et merci beaucoup pour cette réponse.

    Serait-ce possible de me montrer via un exemple comment vous feriez ? comment vous utiliseriez cette technique ?

    Merci d'avance pour votre aide

    Cordialement :-)

  4. #4
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 089
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 089
    Par défaut
    Etudiez donc TIdHTTPRequestInfo.Session qui contient un TIdHTTPSession
    Voir aussi l'évènement OnSessionStart et la propriété AutoStartSession

    Vous devez maitriser le concept de Session si vous développez un mode "connecté"
    Et le TIdHTTPServer contient une propriété SessionList TIdHTTPCustomSessionList implémenté par TIdHTTPDefaultSessionList qui utilise tout ce qui est décrit ci-dessus un tableau d'objet (TIdHTTPSession) identifié par une chaine et protégé par un verrou.

    N'ayant pour ma part fait que des WebService REST one-shot ou utilisant un token, j'ai pu me passer de Session
    Sinon, j'utilise à la place la Session externe fourni par l'appelant (PHP ou JQuery+PHP)
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 131
    Par défaut
    Oui, j'ai déjà mis à True certaines propriétés du composant TIdHttpServer :
    - AutoStartSEssion
    - KeepAlive
    - SessionState

    Mais je ne comprends pas pourquoi les évènements OnSessionStart, OnSessionEnd, OnCreateSession ne se déclenchent pas !
    Images attachées Images attachées  

  6. #6
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 089
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 089
    Par défaut
    SessionTimeOut, faut lui donner un temps, zéro c'est comme si il n'y avait pas de session
    60000 pour commencer mais tu verras que ça pourrait être monter bien plus, à rendre configurable par l'utilisateur
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

Discussions similaires

  1. Réponses: 4
    Dernier message: 29/06/2009, 08h52
  2. [Dba]Programme dans v$session
    Par plochert dans le forum Oracle
    Réponses: 6
    Dernier message: 06/03/2006, 15h41
  3. Execution programme session fermée
    Par oligig dans le forum Autres Logiciels
    Réponses: 1
    Dernier message: 06/09/2005, 10h24
  4. Exécution d'un programme hors session
    Par skywaukers dans le forum Langage
    Réponses: 3
    Dernier message: 07/07/2005, 10h31
  5. [winXP] : session, installation de programmes
    Par devmat dans le forum Windows XP
    Réponses: 5
    Dernier message: 29/12/2004, 15h19

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