AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke HTTPApp.TWebResponse und Cookies
Thema durchsuchen
Ansicht
Themen-Optionen

HTTPApp.TWebResponse und Cookies

Ein Thema von bcvs · begonnen am 8. Jun 2021 · letzter Beitrag vom 10. Jun 2021
Antwort Antwort
bcvs

Registriert seit: 16. Jun 2011
703 Beiträge
 
Delphi 12 Athens
 
#1

HTTPApp.TWebResponse und Cookies

  Alt 8. Jun 2021, 17:57
Hallo zusammen,

ich fange gerade an, eine bestehende PHP-Webanwendung auf Delphi mit WebBroker umzustellen. Soll später eine ISAPI-DLL werden, derzeit zu Testzwecken noch eine Standalone-Exe.

Momentan kämpfe ich noch mit den Cookies. Im WebModule1DefaultHandlerAction mache ich folgendes:
Delphi-Quellcode:
    if Request.PathInfo = '/Index.htmlthen begin
      if Request.CookieFields.Count >0 then begin // ist immer 0
        ShowMessage(Request.CookieFields.Text);
      end;
      LCookie := TStringList.Create;
      try
        LCookie.Add('MyApp=Test Cookies für Webserver');
        LCookie.Add('SetAt=' + FormatDateTime('dd/mm/yyyy hh:mm', Now));

        Response.SetCookieField(LCookie, 'localhost', '/', -1, False);
        PageProducer1.HTMLFile:= HtmlPath + Request.PathInfo;
        Response.Content :=PageProducer1.Content;
      finally
        FreeAndNil(LCookie);
      end;
    end
    else begin
      PageProducer1.HTMLFile:= HtmlPath + Request.PathInfo;
      Response.Content :=PageProducer1.Content;
    end;
Dem SetCookieField gebe ich -1 als Expires mit, damit das Cookie nur so lange vorhanden ist, wie der Browser offen ist. Request.CookieFields.Count ist dann aber 0. Was mache ich da falsch?

Wenn ich Response.SetCookieField(LCookie, 'localhost', '/', Now + 1, False); mache, sehe ich das ShowMessage mit den Cookies. Dann müsste ich die Cookies nur wieder vom Browser entfernen können, wenn der User sich ausloggt. Aber wie geht das?
  Mit Zitat antworten Zitat
Rolf Frei

Registriert seit: 19. Jun 2006
647 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: HTTPApp.TWebResponse und Cookies

  Alt 9. Jun 2021, 18:24
Geht nicht so richtig oder höchstens per JS im Broser direkt. Das geilste ist ja, dass Cookies die nur während der aktuellen Session gelten sollen, von Chrome etc. nicht entsprechend behandelt werden. Mit anderern Worten: Den Bowser so abstellen, dass Chrome wirklich eine neue Session macht, ist kaum noch möglich. Keine Ahnung was die da geraucht haben und sich da nicht mehr daran halten. Firefox hat auch vor einiger Zeit mit diesem dummen Verhalten angefangen.

Übrigens würde ich dir empfehlen direkt mit IIS und ISAPI oder besser CGI-Exe zu testen. CGI.Exe ist übrigens nahezu genau so schnell wie ISAPI, weil IIS die Exe im Chache hält, nur wird da halt immer alles initialisiert und wenn man eine Session führen will ist das da etwas komplexer, aber dafür kann man ohne Stress die WebApp einfach neu kompilieren und fertig. Bei ISAPI ist das dann leider viel problematischer, da man da jeweils die ISAPI-DLL im IIS entladen muss, bevor man sie ersetzen kann.

Geändert von Rolf Frei ( 9. Jun 2021 um 18:48 Uhr)
  Mit Zitat antworten Zitat
zeras

Registriert seit: 11. Mär 2007
Ort: Saalkreis
1.633 Beiträge
 
Delphi 12 Athens
 
#3

AW: HTTPApp.TWebResponse und Cookies

  Alt 9. Jun 2021, 20:09

Übrigens würde ich dir empfehlen direkt mit IIS und ISAPI oder besser CGI-Exe zu testen. CGI.Exe ist übrigens nahezu genau so schnell wie ISAPI, weil IIS die Exe im Chache hält, nur wird da halt immer alles initialisiert und wenn man eine Session führen will ist das da etwas komplexer, aber dafür kann man ohne Stress die WebApp einfach neu kompilieren und fertig. Bei ISAPI ist das dann leider viel problematischer, da man da jeweils die ISAPI-DLL im IIS entladen muss, bevor man sie ersetzen kann.
Ich hatte gelesen, dass die ISAPI schneller wäre. Deshalb hatte ich gleich mit ISAPI angefangen.
Aber wenn es mit der CGI-EXE genauso geht, wäre das auch eine Alternative. Ich habe ja jetzt das Problem, dass ich IIS immer anhalten und neustarten muss. Das würde sich ja dann erübrigen, wie du oben geschrieben hattest.
Kann man die CGI-EXE genauso aufrufen, wie die ISAPI DLL? Kann man dann vielleicht auch noch Ausgaben erstellen, damit man für Tests sieht, was passiert?
Matthias
Es ist nie falsch das Richtige zu tun!
- Mark Twain
  Mit Zitat antworten Zitat
bcvs

Registriert seit: 16. Jun 2011
703 Beiträge
 
Delphi 12 Athens
 
#4

AW: HTTPApp.TWebResponse und Cookies

  Alt 10. Jun 2021, 08:33
Geht nicht so richtig oder höchstens per JS im Broser direkt.
OK, was ist denn dann die best practice dafür?
Oder anders gefragt: Was wäre das Pendant zu session_start(); und den $_SESSION['xxx'] Variablen von PHP. Einfach irgendwelche Werte als globale Variablen serverseitig in Delphi speichern ist wohl keine gute Idee, da ja jeder Seitenauruf einen eigenen Thread startet, wenn ich das richtig verstanden habe. Außerdem muss sich der Seitenaufruf ja mit einer Art Session-ID identifizieren.
  Mit Zitat antworten Zitat
Rolf Frei

Registriert seit: 19. Jun 2006
647 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: HTTPApp.TWebResponse und Cookies

  Alt 10. Jun 2021, 15:54
Ich hatte gelesen, dass die ISAPI schneller wäre. Deshalb hatte ich gleich mit ISAPI angefangen.
Aber wenn es mit der CGI-EXE genauso geht, wäre das auch eine Alternative. Ich habe ja jetzt das Problem, dass ich IIS immer anhalten und neustarten muss. Das würde sich ja dann erübrigen, wie du oben geschrieben hattest.
Kann man die CGI-EXE genauso aufrufen, wie die ISAPI DLL? Kann man dann vielleicht auch noch Ausgaben erstellen, damit man für Tests sieht, was passiert?
ISAPI ist nur in der Theorie schneller, weil das ständige Laden entfällt. In der Praxis merkst du da keinen Unterschied, weil die exe vom IIS (oder OS?) gecacht wird. Eventuell wirst du beim ersten Aufruf einen winzigen Unterschied merken (wir reden hier von ein par ms), aber alle folgenden Aufrufe sind praktisch genauso schnell. Der Stress den man mit einer ISAPI DLL hat, ist mir das nicht wert.

Ja die CGI-EXE kannst du gleich aufrufen, nur halt die exe und nicht die dll. webserver/app/deineapp.exe/... anstatt webserver/app/deineapp.dll/...

Wenn du die exe oder dll nicht in der URL haben willst, müsstest du noch eine Umschreibregel im IIS definieren, die sowas macht: webserver/app/deineapp/...

OK, was ist denn dann die best practice dafür?
Oder anders gefragt: Was wäre das Pendant zu session_start(); und den $_SESSION['xxx'] Variablen von PHP. Einfach irgendwelche Werte als globale Variablen serverseitig in Delphi speichern ist wohl keine gute Idee, da ja jeder Seitenauruf einen eigenen Thread startet, wenn ich das richtig verstanden habe. Außerdem muss sich der Seitenaufruf ja mit einer Art Session-ID identifizieren.
Kann ich dir nicht so recht beantworten, kenne mich da mit PHP nicht aus, da ich bisher alles auch mit Delphi machen konnte. Ich führe bei mir eine eigene "Session" (DB-Tabelle mit weiteren Infos zur Sesssion), die ich als Session-ID Cookie und URL-Parameter mitliefere. in der Sesssion Tabelle halte ch alle Daten fest, die mit der Session zu tun haben, also in dienem Fall die Werte deiner Variablen. Diese Sessions haben einen Timeout, nachdem diese ungültig werden. Dann wird eine neue erstellt und wieder als Cookie und URL-Paramater geliefert. Will man die Session selber löschen (durch Abmelden des Benutzers), muss einfach ein leeres Session-ID Cookie gesendet werden. Dadurch ist die alte Session-ID im Browser nicht mehr gültig.

Geändert von Rolf Frei (10. Jun 2021 um 16:06 Uhr)
  Mit Zitat antworten Zitat
bcvs

Registriert seit: 16. Jun 2011
703 Beiträge
 
Delphi 12 Athens
 
#6

AW: HTTPApp.TWebResponse und Cookies

  Alt 10. Jun 2021, 17:02
Will man die Session selber löschen (durch Abmelden des Benutzers), muss einfach ein leeres Session-ID Cookie gesendet werden. Dadurch ist die alte Session-ID im Browser nicht mehr gültig.
Danke, das funktioniert. So werde ich es dann wohl auch machen. Und die eigentlichen Session-Daten in einer DB-Tabelle halten.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:26 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz