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;
(...)
Partager