Cookie Klasse



  • Hi
    Ich arbeite gerade an einer C++ HTTP Bibliothek und muss in dem Zuge eine Cookie Klasse programmieren. Von den programmier Kenntnissen ist das denke ich kein Problem nur ich verstehe einfach nicht wie ich wenn vom Server Set-Cookie kommt wie ich das parsen soll nach welchen Regeln...
    Bsp google:

    PREF=ID=d10c866a54d801f7:U=f596c5963d57965c:TB=4:TM=1238689611:LM=1266943640:S=TVN8BMOBEOMh8u_g; NID=32=F4NNdpxilLhmh-zfnSBmj_CRLsSVKrcV2crm6KV2rQbcj54HXvO64CqgpWpVR1xM_51PKKZElFHcwGpL8Zep7klCIFMbG9FVdIldSVLXxxCXTJVCSTVUzDgkVJPdLxlT
    

    Was soll das denn bloß bedeuten? Bei anderen seiten ist das wieder völlig anders ich kann da überhaupt keine Regelmäßigkeit erkennen...

    MfG cobra11freak





  • So das ist jetzt mein Quelltext:

    int Cookies::SetCookie(string text, string host)
    {
    while(1)
    {
        Cookie cook;
        unsigned int i = 0;
        //Name Auslesen
        for (;i < text.size();i++)
        {
            if(text[i] != '=')
            {
                cook.Name += text[i];
            }
            else
            i++;
            break;
        }
        //Wert Auslesen
        for (;i < text.size();i++)
        {
            if(text[i] != '=')
            {
                cook.Value += text[i];
            }
            else
            i++;
            break;
        }
        //Attribute Auslesen
    while(i < text.size())
    {
        string temp;
        for (;i < text.size();i++)
        {
            if(text[i] != '=')
            {
                temp += text[i];
            }
            else
            i++;
            break;
        }
        string vers;
        //Struct füllen
        for(;i<text.size();i++)
        {
            if(text[i] != ';')
            {
                if(temp == "expires"||temp == "Expires")
                {
                cook.Expires += text[i];
                }
                else if(temp == "Max-Age"||temp == "max-age")
                {
                cook.MaxAge  += text[i];
                }
                else if(temp == "Path"||temp == "path")
                {
                cook.Path += text[i];
                }
                else if(temp == "Domain"|| temp == "domain")
                {
                cook.Path += text[i];
                }
                else if(temp == "Version"||temp == "version")
                {
                vers += text[i];
                }
            }
            else
            i++;
            break;
        }
    }
    }
    }
    

    Weiß jemand ob bei einem Set-Cookie vielleicht auch mehrere Cookies erstellt werden können?

    Mfg cobra11freak



  • cobra11freak schrieb:

    So das ist jetzt mein Quelltext:
    ...

    Das könnte laufen, oder auch nicht. Dir ist aber scheinbar aufgefallen, dass RFC 2965 die Namen und Attribute als case insensitive festlegt. Solltest du auch berücksichtigen.
    🙂



  • Ehrlich gesagt, habe ich das nur teilweise verstanden was da stand und habe dann bei firefox die cookies gelöscht und mich mit einem SocketSniffer rangehängt, daran habe ich dann nach und nach erkennen können wie das Spiel mit den Cookies läuft. Ich habe jetzt noch zwei Methoden programmiert zum Speichern und Laden und soweit funktioniert alles.
    Nur eine Sache ist kurios:

    string text = cookies.GetCookie(hostname);
        if(text != "")
        {
            str+= "Cookie:";
            str+= text;
            str+= "\n";
        }
    

    Das ist die Ausgabe 😉

    ;ookie: cookie=1
    

    Mfg cobra11freak


Anmelden zum Antworten