Aktuelle Zeit: 28.10.2020 21:32

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Verständnisfrage zu Cookies
BeitragVerfasst: 23.09.2020 15:51 
Offline
Benutzeravatar

Registriert: 08.09.2004 08:53
Hallo in die Runde,

ich benötige Cookies für die Client Server Kommunikation.

Mit SpiderBasic kann ich Client seitig mittels Javascript ein Keks speichern und auch wieder lesen.

Mit PureBasic kann ich Server/CGI ebensfalls ein Cookie mitschicken (WriteCGIHeader(#PB_CGI_HeaderSetCookie, ..)

Aber wie schaffe ich es jetzt, dass der Browser bei jedem Ajax Request das Cookie wieder mitsendet?

Code:
#SpiderBite_Profile = "default"

;{ CGI
EnablePbCgi

#CGI_SUCCESS = "[success]"

ProcedureDll.s CGI_HoleDaten()
  Protected Result.s, k
 
  For k = 0 To CountCGICookies()-1
    Result + CGICookieName(k)+": " + CGICookieValue(CGICookieName(k)) + #CRLF$
  Next

  ProcedureReturn Result
EndProcedure 
ProcedureDll.s CGI_HoleDaten2()
  ProcedureReturn CGI_HoleDaten()
EndProcedure

ProcedureDll.s CGI_Login (txt.s="")
  WriteCGIHeader(#PB_CGI_HeaderSetCookie  , "sessionid_1=" + txt)
  ProcedureReturn #CGI_SUCCESS
EndProcedure

DisablePbCgi
;}

Procedure SetCookie(name.s, value.s)
 ! document.cookie = v_name + "=" + v_value + "; path=/;"
EndProcedure

Procedure CGI_HoleDaten2Callback( success, Result.s )
  Debug "CGI_HoleDaten2 Result: " + Result

EndProcedure

Procedure CGI_HoleDatenCallback( success, Result.s )
  Debug "CGI_HoleDaten Result: " + Result
 
  SetCookie("sessionid_2", "xyz")
  CGI_HoleDaten2()
EndProcedure
 
Procedure CGI_LoginCallback ( success, Result.s )
  Debug "CGI_Login Result: " + Result
  CGI_HoleDaten()
EndProcedure
 
 
CGI_Login ("abcdefg")



Der Browser ruft zunächst CGI_Login() auf und bekommt in der Antwort ein Cookie mitgeliefert.
Wenn dann als nächstes CGI_HoleDaten() aufgerufen wird, wird aber kein Cookie mitgesendet.

Dann SetCookie("sessionid_2", "xyz") im Browser. Laut Debugger im Web-Speicher vorhanden, bis zum Sitzungsende.
Wird aber nicht mitgesendet.

Die Webseite läuft über : http://127.0.0.1:82/SpiderBasic_Compilation0.html
Der CGI Aufruf über : http://127.0.0.1:4001/cgi-bin/PbCgi.exe

Ich verstehe es nicht :(

Kann mich mal jemand bitte richtig rum aufs Pferd setzen?

_________________
"Papa, mein Wecker funktioniert nicht! Der weckert immer zu früh."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Verständnisfrage zu Cookies
BeitragVerfasst: 23.09.2020 17:49 
Offline
Ein Admin
Benutzeravatar

Registriert: 29.08.2004 20:20
Wohnort: Saarbrücken
Hast du in der Entwicklerkonsole deines Browser mitgetrackt, ob die Cookies wirklich ankommen und gespeichert werden? Und welchen Browser nutzt du? Hast du mal einen anderen probiert?
Daneben gibt es aber auch noch die Same-origin policy. Das heißt zwei Server mit der selben Domain, aber unterschiedlichen Ports, dürfen keine Daten miteinander austauschen, solange der Access-Control-Allow-Origin-Header nicht vom Backend gesetzt wird. Ich denke das eher letztes dein Problem sein wird.

Ansonsten habe ich von Spiderbasic keine Ahnung. Ich kenne nur die grundlegende Problematik mit Javascript, das von DomainA geladen wird, und dann mit einem Backend auf DomainB kommunizieren soll.

_________________
Ubuntu Gnome 20.04 LTS x64, PureBasic 5.72 x64 (außerdem 4.41, 4.50, 4.61, 5.00, 5.10, 5.11, 5.21, 5.22, 5.30, 5.31, 5.40, 5.50, 5.60, 5.71b2)
"Die deutsche Rechtschreibung ist Freeware, du darfst sie kostenlos nutzen – Aber sie ist nicht Open Source, d. h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Verständnisfrage zu Cookies
BeitragVerfasst: 23.09.2020 20:10 
Offline
Benutzeravatar

Registriert: 29.08.2004 08:37
Ich hatte letztens ähnliche Probleme. Vielleicht als nett gemeinter Hinweis, falls das der Fall ist: sendet der Server einen Content-Security-Policy Header mit sandbox mit? Falls ja ist die Mindestanforderung "sandbox allow-same-origin", sonst hat jede einzelne Resource die man runterlädt einen eigenen Origin und der Browser isoliert alles.

Allerdings wäre es schön, wenn wir hier die Request/Response Headers mal bekommen für die weitere Analyse. Wie NicTheQuick schon sagte kann es
an Access-Control-Allow-Origin liegen.

Hier steht (leider auf Englisch, ich weiß, aber mit vielen Bildern) wie man auf die Netzwerkkommunikation zwischen Browser und Server kommt für Google Chrome:
https://developers.google.com/web/tools/chrome-devtools/network

Im übrigen wird hier (insbesondere durch das Sequenzdiagramm) ziemlich gut erklärt was es mit CORS auf sich hat:
https://javascript.info/fetch-crossorigin

_________________
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Verständnisfrage zu Cookies
BeitragVerfasst: 24.09.2020 09:28 
Offline
Benutzeravatar

Registriert: 08.09.2004 08:53
NicTheQuick hat geschrieben:
Daneben gibt es aber auch noch die Same-origin policy. Das heißt zwei Server mit der selben Domain, aber unterschiedlichen Ports, dürfen keine Daten miteinander austauschen, solange der Access-Control-Allow-Origin-Header nicht vom Backend gesetzt wird. Ich denke das eher letztes dein Problem sein wird.


@Nick: Danke für den Tipp! :allright: Es ist tatsächlich ein Problem, wenn die Ports unterschiedlich sind..
Ich habe das Projekt mal auf einen externen Server gehieft und siehe da, es werden jetzt sogar beide Cookies (vom Client gesetzt und vom Server) mitgesendet.

Was müsste der Server denn - zusätzlich zum Access-Control-Allow-Origin: * - senden, damit dass erlaubt wird?

_________________
"Papa, mein Wecker funktioniert nicht! Der weckert immer zu früh."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Verständnisfrage zu Cookies
BeitragVerfasst: 24.09.2020 10:15 
Offline
Ein Admin
Benutzeravatar

Registriert: 29.08.2004 20:20
Wohnort: Saarbrücken
Für die Angular-Entwicklung auf localhost:4200, lasse ich das Backend folgende Header zurückliefern. Das ist jetzt Apache-Syntax.
Code:
        SetEnvIf Origin "http(s)?://(localhost:4200)$" AccessControlAllowOrigin=$0
        Header set Access-Control-Allow-Origin %{AccessControlAllowOrigin}e env=AccessControlAllowOrigin
        Header set Access-Control-Allow-Credentials true
        Header set Access-Control-Allow-Methods "POST, GET, OPTIONS, PUT"
        Header set Access-Control-Allow-Headers content-type
        Header add Access-Control-Allow-Headers authorization

Wenn also die Protokoll-Socket-Kombination http://localhost:4200 oder https://localhost:4200 eine Anfrage macht, dann wird der Header "Access-Control-Allow-Origin" mit dem der Kombi zurückgeliefert.
Die andere Header sind vielleicht gar nicht so wichtig für dich. Da kannst du notfalls auch * setzen. Aber bei "Access-Control-Allow-Origin" solltest du niemals einfach nur "*" setzen, vor allem nicht, wenn das Backend öffentlich ist. Erlaube es besser nur für alle Domains, die wirklich auf das Backend zugreifen.

Der Browser schickt zunächst einen OPTIONS-Request um herauszufinden, wie er mit dem Backend kommunizieren darf. Das steht aber viel detaillierte in dem Link von DarkDragon.

_________________
Ubuntu Gnome 20.04 LTS x64, PureBasic 5.72 x64 (außerdem 4.41, 4.50, 4.61, 5.00, 5.10, 5.11, 5.21, 5.22, 5.30, 5.31, 5.40, 5.50, 5.60, 5.71b2)
"Die deutsche Rechtschreibung ist Freeware, du darfst sie kostenlos nutzen – Aber sie ist nicht Open Source, d. h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen."


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye