Session ID's



  • Wie wäre es, wenn Du Dir mal aufmerksam das rfc 2616 durch liest. Dann wirst Du das http-Protokoll verstehen. Das habe ich auch gemacht, als ich meinen Webserver in C++ geschrieben habe 😉 .

    Session-IDs kannst Du entweder als query-Parameter übertragen oder als Cookie. Beides muss dein Webserver also parsen können.



  • Hi!
    Ich habe ein ähnliches Problem, ich möchte in meinem Webserver die Benutzer unterscheiden. Dazu wollte ich jedem Benutzer eine SesionId schicken, damit ich weiß welcher Benutzer gerade aktiv ist! Nur der Mozilla Firefox erkennt die SessionID nicht.
    Nach der Authentifizierungsaufforderung folgt direkt der Set-Cookie header!
    Nur schickt mir der Browser daten für die Authentifizierung, aber nicht das was im Cookie steht. Wo könnte den das Problem liegen?
    Danke im Voraus.



  • Oh ich hatte vergessen ein bisschen Code anzuhängen:

    str="HTTP/1.0 401 Unauthorized\r\n";
    str+="WWW-Authenticate: Digest "; 						
    str+="realm=\""+"irgendein realm"+"\"";
    str+=" qop=\"auth,auth-int\"";
    str+=" nonce=\""+"irgendeine nonce"+"\"\r\n";
    str+="Set-Cookie: SessionID=\"iajsdi\"; Version=\"1\"";
    

    Also mit der Authentifizierung funktioniert, es ploppt ein Fenster im Browser auf, nur das mit der SessionId im Cookie kriekt er nicht hin, zumindest bekomme ich bei weiteren Requests kein Cookie header mitgeliefert. Mach ich da was falsch?



  • Prog123 schrieb:

    Oh ich hatte vergessen ein bisschen Code anzuhängen:

    str="HTTP/1.0 401 Unauthorized\r\n";
    str+="WWW-Authenticate: Digest "; 						
    str+="realm=\""+"irgendein realm"+"\"";
    str+=" qop=\"auth,auth-int\"";
    str+=" nonce=\""+"irgendeine nonce"+"\"\r\n";
    str+="Set-Cookie: SessionID=\"iajsdi\"; Version=\"1\"";
    

    Also mit der Authentifizierung funktioniert, es ploppt ein Fenster im Browser auf, nur das mit der SessionId im Cookie kriekt er nicht hin, zumindest bekomme ich bei weiteren Requests kein Cookie header mitgeliefert. Mach ich da was falsch?

    Also wenn Du einen HTTP-Fehlercode schickst, wundert es mich nicht, wenn der Firefox die Cookie-Header nicht weiter beachtet. Ich bin mir nicht sicher, was das rfc dazu sagt, aber rein gefühlsmässig würde ich dazu tendieren zu sagen, das ist von Firefox ok.

    Ganz abgesehen davon, schreibst Du ineffizienten C++-Code. Du hast in dem obigen Beispiel viele unnötige Allokationen.



  • Danke für deine Antwort.
    Das mit dem str+= war nur wegen der besseren übersichtlichkeit hier im Forum.
    D.h. wenn ich vorher code 200 schicke könnte es funktionieren. Ich versuche das mal!



  • Hi! Ich habe auch noch ein weiteres Problem.
    Und zwar habe ich ja vorher eine Authentifizierung.
    Das Problem ist, dass Firefox, nachdem bei der ersten Anfrage eine Authentifizierung verlangt wird, bei jeder weiteren Anfrage, den Authorization header immer wieder mit schickt, obwohl nur bei der ersten Anfrage eine Authentifizierung verlangt wurde!!
    Ist das ein Fehler in Firefox?



  • Prog123 schrieb:

    Hi! Ich habe auch noch ein weiteres Problem.
    Und zwar habe ich ja vorher eine Authentifizierung.
    Das Problem ist, dass Firefox, nachdem bei der ersten Anfrage eine Authentifizierung verlangt wird, bei jeder weiteren Anfrage, den Authorization header immer wieder mit schickt, obwohl nur bei der ersten Anfrage eine Authentifizierung verlangt wurde!!
    Ist das ein Fehler in Firefox?

    Das ist korrektes Verhalten von Firefox. HTTP ist ein zustandsloses Protokoll. Daher merkt sich der Browser (nicht nur Firefox) den Benutzername und das Passwort für die Site und schickt sie immer wieder mit. Dass Du da noch einen Cookie schickst, ist unabhängig von der Authentifizierung. Ein normaler Webserver prüft den Benutzernamen und das Passwort bei jedem Zugriff. Wenn es also nur um die Authentifizierung geht, kannst Du auf das Cookie verzichten.



  • Die Cookies brauch ich noch wegen den SessionId's, durch die ich Benutzer zusätzlich zur IP unterscheiden will.
    Das Problem ist, dass ich meinen Server auf localhost laufen habe, bei jeder Anfrage wird dem Browser daher eine neue SessionId übermittelt Wenn ich eine andere Anfrage mache auf den gleichen Server und dem gleichen Browser, dann muss ich diesem wieder eine neue SessionId zuweisen. Ich dachte eigentlich das ich zu beginn einer Sitzung eine SessionId dem Browser übermittele und diese dann bis timout oder bis ich den Browser beende hält.



  • Prog123 schrieb:

    Die Cookies brauch ich noch wegen den SessionId's, durch die ich Benutzer zusätzlich zur IP unterscheiden will.
    Das Problem ist, dass ich meinen Server auf localhost laufen habe, bei jeder Anfrage wird dem Browser daher eine neue SessionId übermittelt Wenn ich eine andere Anfrage mache auf den gleichen Server und dem gleichen Browser, dann muss ich diesem wieder eine neue SessionId zuweisen. Ich dachte eigentlich das ich zu beginn einer Sitzung eine SessionId dem Browser übermittele und diese dann bis timout oder bis ich den Browser beende hält.

    Warum musst Du bei jeder Anfrage eine neue Session-Id übermitteln? Wenn der Browser schon eine hat, dann lass es doch einfach.



  • Mein Webserver kann verschiedene Anfragen beantworten, so kann man über den Webbrowser als Beispiel folgendes anfragen:

    1. Anfrage: http://localhost/Katzenfutter.xml
    2. Anfrage: http://localhost/Hundefutter.xml

    So wenn der Browser Anfrage 1 macht, übersende ich diesem eine SessionID. Die merkt er sich auch solange Anfrage 1, angefragt wird.
    Jetzt mach ich mit dem gleichen Webbrowser die Anfrage 2 an meinen Server, und jetzt kommt das Problem, der Webbrowser sendet mir die SessionID nicht mehr.
    Mein Server erkennt folglich nicht, dass es der gleiche Benutzer ist und muss ihm dadurch eine neue SessionId zuweisen.
    Eigentlich müsste doch der Browser an der Domain localhost erkennen, dass es sich um den gleichen Server handelt und folglich muss er mir doch die SessionId, die ich ihm schon bei Anfrage 1 übermittelt habe, auch zurück schicken. Tut er aber nicht.



  • Dann solltest Du Dir nochmal die Syntax für Set-Cookie anschauen (http://www.ietf.org/rfc/rfc2109). Insbesondere das Path-Element.


Anmelden zum Antworten