|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Nouveau Membre du Club
![]() Inscription : novembre 2002 Messages : 92 ![]() |
Bonjour,
Voilà mon problème : J'identifie un utilisateur en utilisant ma base de données, pour cela je gère l'évenement BeforeDispatch dans lequel je redirige tous les appels de services vers un service "TestLogin": procedure TMonModule.BeforeDispatch( const XMLCollection: IXMLCollection; const XMLRequest: IXMLRequest; var Handled: WordBool); var Action : string; begin Action := UpperCase(XMLRequest.Context.Values['Action']); if Action = '' then Action := XMLApplication.InitParams.GetValue('XMLC_DefaultAction'); if (Action <> 'FORMLOGIN') and (Action <> 'LOGIN') Then begin XMLRequest.Context.SetValue('NextAction', Action); XMLRequest.Context.SetValue('Action', 'TestLogin'); end; end; Lors de la connexion je stocke l'identifiant de l'utilisateur et d'autres paramètres dans des cookies puis je stocke la même chose dans la base, ensuite à chaque appel de service j'accède à ma base via l'évènement "BeforeXMLGram" d'un composant "TestLogin" posés sur le webmodule, le problème est que parfois je n'arrive pas à récupérer le contenu des cookies et que l'application devient instable ... la form d'identification s'affiche sans raisons ou ca fonctionne mais le skin n'apparaît pas (environ 1 fois sur 3 alors que c'est toujours le même thread qui est utilisé). Pire : lorsque j'utilise mon application en StandAlone, la récupération des cookies échoue à chaque fois. Je ne sais pas ou regarder pour corriger ça, peut être que ca vient de ma façon de lire et d'écrire le cookie, bref aidez moi ! Ecriture du cookie : procedure TMonModule.LoginBeforeXMLGram(XMLGram: IXMLGram; InputDoc, OutputDoc: IXMLCursor; var Skip: Boolean); var (...) procedure SetLoginCookies; var CookiesExpiration: TDateTime; Path: string; begin Path := XMLApplication.InitParams.GetValue('XMLC_CookiesPath'); CookiesExpiration := GetExpiration; XMLRequest.AddCookie('XMLC_Session', Session, '', Path, CookiesExpiration); XMLRequest.AddCookie('XMLC_UserName', User, '', Path, CookiesExpiration+1000); XMLRequest.AddCookie('XMLC_Skin', XMLRequest.Context.GetValue('XMLC_Skin'), '', Path, CookiesExpiration+1000); XMLRequest.AddCookie('XMLC_Language', XMLRequest.Context.GetValue('XMLC_Language'), '', Path, CookiesExpiration+1000); end; begin (...) end; Lecture des cookies : procedure TMonModule.TestLoginBeforeXMLGram(XMLGram: IXMLGram; InputDoc, OutputDoc: IXMLCursor; var Skip: Boolean); var (...) function ConnexionOK : Boolean; var Session, User, RemoteHost : String; Path : String; begin Result := false; Session := XMLRequest.GetCookie('XMLC_Session'); Path := XMLApplication.InitParams.GetValue('XMLC_CookiesPath'); XMLRequest.AddCookie('XMLC_Session', Session, '', Path, GetExpiration); User := XMLRequest.GetCookie('XMLC_UserName'); RemoteHost := XMLRequest.Context.Values['Request.RemoteHost']; (...) end; (...) |
|
|
00
|
|
|
#2 |
|
Membre Expert
![]() |
Pour écrire dans les cookies, je te conseille d'utiliser l'instruction Assign dans ton XMLService TestLogin
en Destination tu indiques Cookies avec le nom que tu souhaites. Si des paramètres sont mis dans les GlobalsParams, ils sont présent le Context. D'autre part pour lire les cookies il faut passer par le Context car tous les cookies sont extrait lors du décodage de la requête et sont copiés dans le Context, donc pas besoin de récupérer les cookies à la main à partir de la requête
__________________
RDM Tout Est Relatif Rubrique XMLRAD: http://xmlrad.developpez.com FAQ XMLRAD: http://xmlrad.developpez.com/faq/ |
|
|
00
|
|
|
#3 |
|
Nouveau Membre du Club
![]() Inscription : novembre 2002 Messages : 92 ![]() |
Bonjour,
Merci de ta réponse, je vais faire quelques tests par contre je ne vois pas très bien comment utiliser assign du XMLService pour écrire un cookie ... > Pour écrire dans les cookies, je te conseille d'utiliser l'instruction Assign > dans ton XMLService TestLogin > en Destination tu indiques Cookies avec le nom que tu souhaites. |
|
|
00
|
|
|
#4 |
|
Nouveau Membre du Club
![]() Inscription : novembre 2002 Messages : 92 ![]() |
Après quelques tests je remarque que lorsque mon application est en mode standalone il est impossible de récupérer les cookies (que ce soit par le context ou par GetCookie).
|
|
|
00
|
|
|
#5 |
|
Membre Expert
![]() |
Il est vrai que ce n'est pas garantie que ca marche en standalone...
__________________
RDM Tout Est Relatif Rubrique XMLRAD: http://xmlrad.developpez.com FAQ XMLRAD: http://xmlrad.developpez.com/faq/ |
|
|
00
|
|
|
#6 |
|
Nouveau Membre du Club
![]() Inscription : novembre 2002 Messages : 92 ![]() |
...
Que veut dire "ce n'est pas garanti", si j'ai bien compris une application "Stand Alone HTTP Server (Delphi 6)" ne gère pas les cookies, cela m'étonne car ca veut aussi dire qu'une application Standalone ne gère ni les skins, ni la sécurité (étant donné que ces deux fonctionnalités utilisent les cookies). Bref je pense que j'ai mal compris ... pourriez vous m'éclairer un peu plus sur le sujet ? |
|
|
00
|
|
|
#7 |
|
Membre Expert
![]() |
En stand Alone le serveur Web c'est un serveur HTTP venant des composants Indy... donc le "pas garantie" c'est "est-ce que le serveur HTTP Indy gère bien les cookies".
Je dis ca mais j'ai pas encore eu le temps de vérifier... Je vais regarder et je te tiens au courant.
__________________
RDM Tout Est Relatif Rubrique XMLRAD: http://xmlrad.developpez.com FAQ XMLRAD: http://xmlrad.developpez.com/faq/ |
|
|
00
|
|
|
#8 |
|
Nouveau Membre du Club
![]() Inscription : novembre 2002 Messages : 92 ![]() |
Ca va je ne suis pas pressé mais j'aimerais savoir ce qu'il en est.
Par contre j'ai toujours des problèmes avec les cookies, les caches, ... (Pages d'erreur serveur 500, page de login qui revient de temps en temps, poste sous Win2K SP3 qui necessitent une modif de la config pour accepter les cookies, ...). Y a t'il une manière spéciale de configurer IIS (parametres "etat de session", "cache", ...) ? |
|
|
00
|
|
|
#9 |
|
Membre Expert
![]() |
Le stand Alone est vraiment fait pour avoir un petit serveur HTTP, il traite une requête http simple et c'est tout, ne t'attend pas a ce qu'il fasse ce que fait un serveur IIS.
plus généralement, la configuration par défaut du Serveur IIS est en général suffisante. Les extensions peuvent être virées mais pas la mise en mémoire cache des dll isapi. IE a une configuration par défaut qui accepte les cookies et ca suffit en général. mais comme je l'ai dit dans un message précédent, le domain est case sensitive dans les cookies...
__________________
RDM Tout Est Relatif Rubrique XMLRAD: http://xmlrad.developpez.com FAQ XMLRAD: http://xmlrad.developpez.com/faq/ |
|
|
00
|
|
|
#10 |
|
Nouveau Membre du Club
![]() Inscription : novembre 2002 Messages : 92 ![]() |
Merci de m'avoir mis sur la voie, deux choses étaient à l'origine de mes problèmes d'affichage/login/cookies :
1- Les cookies sont effectivement case sensitive ... d'ou le retour au login sur certaines actions ... 2- Le poste de développement était un windows 2000 Pro or celui ci limite le nombre de connexions à 10, donc parfois la feuille de style n'est pas chargée, parfois ce sont quelques images qui manquent ... en activant les connexions HTTP persistantes et les caches on rencontre moins de problèmes ... |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com