Announcement

Collapse
No announcement yet.

Session ID

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Session ID

    Hi! Ich habe einen Webserver in C++ geschrieben. Und jetzt will ich mehrere Benutzer unterscheiden können und zwar nicht nur durch ihre IP, sondern durch Session Id's. Problem ist ich weiß nicht wie Mozilla Firefox die ID mir zurück gibt. Ich habe es schon versucht mit Set-cookie aber das hat nicht funktioniert! Könnt ihr mir da helfen, da ich im Internet fast gar nichts darüber finde.

  • #2
    Woher haben deine Clients die SessionID?

    Irgendwie hast du die falsche Reihenfolge drin

    Der Server kann Clients nur an der IP erkennen. Kommt ein neuer Client merkt der Server sich diesen und speichert die Information zu dem Client. Damit er einen wiederholten Besuch eines Clients erkennen kann setzt er einen Cookie (oder nutzt URL-Rewriting).

    Unabhängig von Browser werden die Daten im HTTP-Header übermittelt.

    Vielleicht mal ein Blick in die RFC werfen?
    Christian

    Comment


    • #3
      Nein, ich hatte mich falsch ausgedrückt.
      Klar unterscheide ich die Benutzer mit der IP, nur wollte ich zusätzlich nach dem ersten Besuch des Clients, diesen eine SessionID übermitteln. Der Grund dafür wenn mehrere Nutzer der gleichen IP Anfragen, sollen diese auch unterschieden werden.
      Das mit dem Cookie habe ich versucht, durch den Set-Cookie header.
      Habe das aber nicht hingekriegt!
      Im internet gab es dazu nur für php vorgefertigte Funktionen!

      Gruß

      Comment


      • #4
        Im internet gab es dazu nur für php vorgefertigte Funktionen!
        Aha,

        http://www.google.as/search?sourceid...+cookie+setzen

        http://www.example-code.com/vcpp/http_addCookiesGet.asp
        Christian

        Comment


        • #5
          Die SessionID kann auf verschiedene Arten übertragen werden: POST, GET oder Cookie. Dazu wäre es ratsam, sich einfach mal den Header bei einer solchen Übertragung anzuschauen (dann brauchst du dich nicht durch die RFC quälen). Kannste ganz einfach mit nem PlugIn für Firefox machen: zB "Live HTTP Headers". Da kannste schauen, was zum Beispiel als Header an amazon.de geschickt wird und was wieder zurück kommt. Musste den Header halt dann in deinem Webserver nur soweit auseinander schneiden, dass du die SessionID rausgelöst hast.

          Zumindest hab ich das so damals in meiner Bachelor-Arbeit gemacht. Klappt gut.

          Hoffe, ich konnt helfen.

          Comment


          • #6
            Danke für eure Antworten ihr habt mir wirklich gut geholfen.
            Ich habe das mit der SessionID hingekriegt, aber es gibt da immer noch ein Problem.
            Mein Server kann verschiedenene Anfragen annehmen:
            nur mal als Beispiel:

            1. Anfrage: localhost/hundefutter.xml
            2. Anfrage: localhost/katzenfutter.xml

            (Ist nur ein Beispiel für die unterschiedlichen Anfragen)
            Die Sache ist, dass bei der ersten Anfrage der Webbrowser eine SessionID kriegt. Die schickt er mir auch soweit zurück. Nur das Problem ist wenn der gleiche Webbrowser die zweite Anfrage stellt, will er eine neue SessionID, wahrscheinlich weil er denkt es wäre ein anderer Server, da die Anfrage ja nicht mit hundefutter endet.

            Gibt es eine Möglichkeit womit der Webbrowser trotzdem erkennt, dass es sich um den gleich Webserver handelt und daher nicht eine neue SessionID will?

            Comment


            • #7
              Die SessionID musst du hin und her schicken, bei jeder Anfrage. Das heißt, wenn du von hundefutter.xml auf katzenfutter.xml wechselst. musst du bei der Anfrage nach katzenfutter.xml die SessionID an den Server übermitteln. Dann schickt dieser die SessionID mit der angeforderten katzenfutter.xml zurück. Das sollte so lange geschehen, bis du per Browser den Befehl zum Beenden der Session überträgst bzw die Session wg timeout beendet wird.

              Comment


              • #8
                Ich dachte eigentlich, dass dem Browser nur eine SessionId übermittelt wird und solange der webbrowser auf dem gleichen Server zugreift, die Id bestehen bleibt. Es sei denn es kommt vorher ein timeout oder der Webbrowser wird beendet. Sonst müsste doch bei einem Internet Shop sich die SessionId bei jeder neuen Seite doch auch ändern, aber wie soll man dann den Benutzer von anderen unterscheiden.

                Comment


                • #9
                  So ist es doch auch, aber die ID muss jedesmal an den Server gesandt werden. Der einmal gesetzte Cookie wird bei jedem Request wieder an den Server übermittelt. Dort muss dieser prüfen, ob er den User kennt,sein Warenkorb o.a.
                  Christian

                  Comment


                  • #10
                    Ja genau das ist mein Problem, der Browser schickt meinen Webserver nur bei exakt einer Anfrage die Id wieder. Bei einer anderen Anfrage bekomme ich keine Id zurück. Wahrscheinlich weil er denkt das wäre ein anderer Server. Ist es ja in dem Fall nicht. Alles läuft auf localhost, nur kann mein Server verschiedene Seiten anzeigen. So wollte ich dass der Browser mir bei allen diesen verschiedenen Seiten die gleiche Id zurück schickt. Tut er aber nicht, daher erkennt mein Server den Browser nicht und sendet ihm für jede neue Seite eine extra Id. Mein Ziel ist es aber eine Id für alle Seiten. Ich weiß nicht wo das Problem liegt, kann es sein dass er localhost als Domain bei cookies nicht akzeptiert, denn sonst müsste der Browser wissen, dass es immer der gleiche Server ist?

                    Comment


                    • #11
                      Also wenn du Cookies verwendest, ist die SessionID ja lokal gespeichert. Damit braucht der Server die SessionID nicht wieder zurück senden, da sie ja weiterhin beim Browser bekannt ist. Solltest du eine der anderen beiden Varianten (POST oder GET) verwenden, muss die SessionID jedes mal auch vom Server zurückgesendet werden an den Browser, da sie dann ja nirgens gespeichert ist auf dem Client. Wie bereits erwähnt, werden anhand der SessionID benutzerspezifische Inhalte vom Server identifiziert, so dass dieser diese Inhalte an den Browser schicken kann.

                      Startest du mehrere Browser ist es Sache des TCP/IP-Protokolls, die richtige Anwendung als Adressat auf dem PC zu finden. Damit hast du Also nichts zu tun. Sollte dich das dennoch interessieren, google nach dem 7-Schichten-Modell.

                      Comment


                      • #12
                        Du hast dir mit o.a. Tool mal den 2. Request (wo der Cookie fehlt) angesehen?
                        Cookie Datum falsch?
                        Cookie Domäne falsch?
                        Christian

                        Comment


                        • #13
                          Dem Browser ist es egal, welcher Server dahinter steht. Und dem Server ist es egal, welcher Browser aufruft. Das ist, wie schon erwähnt, Sache des Protokolls.

                          Wichtig ist die SessionID. Das ist dein Zugangsticket. Sozusagen die Personalnummer. Der Benutzer muss diese immer mitschicken.
                          Das lässt sich mit einem Warenhaus vergleichen. Der Server ist das Warenhaus. Der Browser der Ausgabeschalter mit Ausweiskontrollautomaten. Der Benutzer muss sich jedes mal ausweisen, wenn er was haben will. Gehst du einmal hin mit Ausweis, bekommst du das, was du willst. Gehst du nochmal hin, kennt die der Automat nicht und du musst dich erneut ausweisen. Du musst immer im Hinterkopf haben: "DAS SIND MASCHINEN" Die denken nicht.

                          Comment


                          • #14
                            Hi.Leute ich schick euch mal das was ich dem Webbrowser bei seiner ersten Anfrage schicke!

                            Code:
                            text="HTTP/1.0 401 Unauthorized\r\nSet-Cookie: SID=8123js; domain=\"\";\nWWW-Authenticate: Digest realm=\"irgend ein realm\" ;
                            text+="\" algorithm=MD5 qop=\"auth\" nonce=\"8313j1h3n1uj2318313h1j3n..."\"\r\n";
                            Mit jeder Authentifizierung wird dem Browser eine SID geschickt.
                            Für die domain localhost habe ich im Internet gelesen funktioniert nur "".
                            Wenn ich die Zeit und Datum mit übergebe funkioniert gar nichts mehr, könnt mir vielleicht sagen wie ich hier die Zeit und Datum richtig übergebe, denn wahrscheinlich kann sich der Browser deswegen bei verschiedenen Anfragen nicht auf die selbe cookie zugfreifen.

                            Comment

                            Working...
                            X