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

Delphi Discussion :

IdHTTPServer login logout


Sujet :

Delphi

  1. #1
    Nouveau membre du Club Avatar de myflash
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2011
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2011
    Messages : 63
    Points : 25
    Points
    25
    Par défaut IdHTTPServer login logout
    Hello groupe ! au fait merci, vous me sauver toujours la vie lollll


    j'ai une petite application delphi, je veux faire une petite page web avec IdHTTPServer dans IdHTTPServer1CommandGet

    je veux que à la première connexion avec chrome il demande un login avec WWW-Authenticate: Basic

    un coup loggé, j'ai besoin d'un petit contenu html mais ce contenu doit contenir aussi un boutton logout

    dans le fond rien de compliqué mais j'ai des problemes
    exemple quand j'appelle un logout avec un bouton c'est un form qui s'appelle logoutform puis un boutton qui a comme valeur logout=true

    quand le IdHTTPServer1CommandGet est appelé je vois qu'il y a un parametre logout=true, donc je réponds :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
                                AResponseInfo.CustomHeaders.Add('WWW-Authenticate: Basic realm="My Realm"');
                                AResponseInfo.ContentText := 'Authentification échouée';
                                AResponseInfo.ResponseNo  := 401;
    c'est ok dans le browser ça demande de se loguer, le user entre sont user et password, et ça appelle encore IdHTTPServer1CommandGet avec les ARequestInfo.AuthUsername et le ARequestInfo.AuthPassword remplis

    mais le form logoutform est encore la !!!!

    comment on peut effacer le form logoutform avant d'envoyer le AResponseInfo.ResponseNo := 401 ?

  2. #2
    Nouveau membre du Club Avatar de myflash
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2011
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2011
    Messages : 63
    Points : 25
    Points
    25
    Par défaut
    je vous donne un code de base que j'ai maintenant :


    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
     
     
    procedure TFormMain.IdHTTPServer1CommandGet(AContext: TIdContext; ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
    var
        tempresp  : string;
        AuthValide: boolean;
        FileStream: TFileStream;
     
    begin
     
        if UpperCase(ARequestInfo.Document) <> '/FAVICON.ICO' then
        begin
     
            AuthValide := false;
     
            if (ARequestInfo.AuthUsername = DefaultWebUserName) and (ARequestInfo.AuthPassword = DefaultWebPassword) then
            begin
                AuthValide := true;
            end;
     
            if (ARequestInfo.Params.values['Logout'] = 'true') then
            begin
                AuthValide := false;
                ARequestInfo.Params.Clear;
            end;
     
            if AuthValide then
            begin
                tempresp := '<b>Hello World !</b><br>';
                tempresp := tempresp + '<form id="LogoutForm" method="post">';
                tempresp := tempresp + '<input type="hidden" name="Logout" value="true">';
                tempresp := tempresp + '    <button type="submit">Logout</button>';
                tempresp := tempresp + '</form>';
     
                AResponseInfo.ContentText := tempresp;
                AResponseInfo.ResponseNo  := 200;
            end
            else
            begin
     
                AResponseInfo.CustomHeaders.Add('WWW-Authenticate: Basic realm="My Realm"');
                AResponseInfo.ContentText := 'Authentification échouée';
                AResponseInfo.ResponseNo  := 401;
     
            end;
     
        end
        else
        begin
     
            FileStream := TFileStream.create(ExtractFileDir(ExeName) + '\icon.ico', fmOpenRead or fmShareDenyWrite);
            try
     
                AResponseInfo.ContentType   := 'image/x-icon';
                AResponseInfo.ContentStream := FileStream;
                AResponseInfo.ContentLength := FileStream.Size;
            except
                FileStream.Free;
                raise;
            end;
        end;
     
    end;

  3. #3
    Nouveau membre du Club Avatar de myflash
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2011
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2011
    Messages : 63
    Points : 25
    Points
    25
    Par défaut
    J'ai cette solution mais j'aime moin que l'autre, qu'en pensez vous ?
    pour les besoin du teste j'ai des constante de username et password, mais resterais juste a ajouter une system de user avec une bd


    on declare un HTTPSessionCokie: TStringlist;
    HTTPSessionCokie := TStringlist.create; dans le FormCreate
    HTTPSessionCokie.free dans le FormClose


    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
    93
    94
    95
     
     
     
    procedure TFormMain.IdHTTPServer1CommandGet(AContext: TIdContext; ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
    var
        tempresp       : string;
        FileStream     : TFileStream;
        AccessSessionID: string;
        tempind        : Integer;
    begin
     
        if UpperCase(ARequestInfo.Document) <> '/FAVICON.ICO' then
        begin
     
            AuthValide      := false;
            AccessSessionID := '';
     
            if ARequestInfo.Cookies.GetCookieIndex('AccessSessionID') > -1 then
            begin
                AccessSessionID := ARequestInfo.Cookies.Cookies[ARequestInfo.Cookies.GetCookieIndex('AccessSessionID')].Value;
            end;
     
            if (ARequestInfo.Params.values['Logout'] = 'true') then
            begin
                if (HTTPSessionCokie.IndexOf(AccessSessionID) > -1) then HTTPSessionCokie.Delete(HTTPSessionCokie.IndexOf(AccessSessionID));
                AccessSessionID           := '';
            end;
     
            if (ARequestInfo.Params.values['Login'] = 'true') then
            begin
                if (ARequestInfo.Params.values['UserName'] = DefaultWebUserName) and (ARequestInfo.Params.values['Password'] = DefaultWebPassword) then
                begin
                    AccessSessionID := '';
                    Randomize;
                    // genere une chaine aleatoire de 64 lettres comme no de session
                    for tempind := 1 to 64 do 
                    begin
                        AccessSessionID := AccessSessionID + Chr(Random(26) + 65);
                    end;
                    HTTPSessionCokie.Add(AccessSessionID);
                    AResponseInfo.CustomHeaders.AddValue('Set-Cookie', 'AccessSessionID=' + AccessSessionID + ';');
     
                end;
            end;
     
     
            if (HTTPSessionCokie.IndexOf(AccessSessionID) > -1) then
            begin
     
                tempresp := '<b>Hello World !</b><br>';
                tempresp := tempresp + '<form id="LogoutForm" method="post">';
                tempresp := tempresp + '<input type="hidden" name="Logout" value="true">';
                tempresp := tempresp + '    <button type="submit">Logout</button>';
                tempresp := tempresp + '</form>';
     
                AResponseInfo.ContentText := tempresp;
                AResponseInfo.ResponseNo  := 200;
     
            end
            else
            begin
                if (HTTPSessionCokie.IndexOf(AccessSessionID) > -1) then HTTPSessionCokie.Delete(HTTPSessionCokie.IndexOf(AccessSessionID));
                AccessSessionID           := '';
                tempresp                  := '<b>Private Website, proced with login :</b><br><br>';
                tempresp                  := tempresp + '<form id="LoginForm" method="post">';
                tempresp                  := tempresp + '<input type="hidden" name="Login" value="true">';
                tempresp                  := tempresp + '<table><tr>';
                tempresp                  := tempresp + '<td>User</td><td><input type="text" name="UserName" value=""></td>';
                tempresp                  := tempresp + '</tr><tr>';
                tempresp                  := tempresp + '<td>Pass</td><td><input type="text" name="Password" value=""></td>';
                tempresp                  := tempresp + '</tr></table><br>';
                tempresp                  := tempresp + '<button type="submit">Login</button>';
                tempresp                  := tempresp + '</form>';
                AResponseInfo.ContentText := tempresp;
                AResponseInfo.ResponseNo  := 200;
     
            end;
     
        end
        else
        begin
     
            FileStream := TFileStream.create(ExtractFileDir(ExeName) + '\icon.ico', fmOpenRead or fmShareDenyWrite);
            try
     
                AResponseInfo.ContentType   := 'image/x-icon';
                AResponseInfo.ContentStream := FileStream;
                AResponseInfo.ContentLength := FileStream.Size;
            except
                FileStream.Free;
                raise;
            end;
        end;
     
    end;

Discussions similaires

  1. login logout redirect
    Par userB dans le forum Django
    Réponses: 3
    Dernier message: 11/07/2011, 20h46
  2. login, logout, page sécurisée
    Par Delphives dans le forum JSF
    Réponses: 8
    Dernier message: 18/04/2008, 18h57
  3. Login - logout nouvelle fenetre "page not found"
    Par sperron dans le forum ASP
    Réponses: 1
    Dernier message: 24/01/2007, 22h11
  4. login-logout session asp et javascript
    Par sperron dans le forum ASP
    Réponses: 3
    Dernier message: 15/12/2006, 15h56
  5. [Sécurité] Login/logout
    Par kastha dans le forum Langage
    Réponses: 1
    Dernier message: 11/05/2006, 03h14

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