CGI C++ Session



  • Hi Leute,

    In PHP kann man ja in Sessions Values speichern. Geht dies auch irgendwie in CGI mit C++ wo die Values im Browser gesepeichert werden. (Das Cookie kann man ja auch im Browserspeicher ablegen)
    Ich will nicht jedesmal die Daten beim aufruf einer neuen Seite aus der Datenbank auslesen.
    z.B. Name, userid, etc.
    Derzeit speicher ich die Userid in einen Cookie und bei jedem Aufruf hole ich mir die anderen daten des Users aus der DB

    [ Dieser Beitrag wurde am 12.04.2003 um 08:58 Uhr von Unix-Tom editiert. ]



  • Wieso willst du den außer der Session-ID sachen beim User speichern? Ist doch nur viel leichter manipulierbar!
    Also ich würde es so lassen, wie du es hast: Session-ID beim User speichern (Cookie oder URI) und dann die Session-Vars dazu aus einer DB holen 🙂



  • Da muss ich mich flenders anschließen. Am besten baust du dir die PHP Sessions nach und speicherst nur eine Session ID beim Benutzer.

    Es gibt keine andere Möglichkeit außer Cookies Daten beim Benutzer zu speichern. Und bedenke, dass Cookies nicht immer aktzeptiert werden müssen und deine Webanwendung dann immer noch funktionieren sollte.


  • Mod

    @Unix-Tom:
    PHP macht es genauso:
    die Session ID wird beim user gespeichert, der rest steht in einer DB oder in Dateien auf dem Server.

    aber achtung: die SESSION ID beim User speichern und auf keinen fall die User ID

    denn alle daten die der user bekommt, kann er manipulieren!



  • Und bei der Session ID muss man noch eine Warnung hinzufügen: Die darf auf keinen Fall rekonstruierbar sein, denn sonst rate ich einfach die Session ID meines Vorgänger und kann so seine Session übernehmen und Beispielsweise auf seine Rechnung mir Sachen bestellen.



  • Ne hab mich vielleicht schlecht ausgedrückt. Ich habe keine SessionID da ich nicht PHP sondern C++ verwende.
    Ich speicher auch nichts im Cookie auf der Festplatte beim User sondern im Cookiespiecher des Browsers. Wenn der geschlossen wird ist auch der Speicher weg und das Cookie weg.
    Wollte nurmal wissen wie im Grunde PHP sie Sessionvariablen speichert.
    Hat aber Shade schon gesagt. In Temp-Dateien oder in einer DB.
    Dachte aber ich könnte bestimmte Values zusätzlich irgendwo ablegen um sie jedesmal abfragen zu können ohne wieder eine datei oder eine DB abzufragen.



  • Ich habe keine SessionID da ich nicht PHP sondern C++ verwende.

    Ne, die musst du dir dann selbst erstellen, da C++ das ja nicht eingebaut hat.

    Cookie auf der Festplatte beim User sondern im Cookiespiecher des Browsers

    Da ist kein Unterschied außer in der Lebendsdauer des Cookies. Das Problem ist aber das gleiche.



  • Original erstellt von Loggy:
    [Da ist kein Unterschied außer in der Lebendsdauer des Cookies. Das Problem ist aber das gleiche.

    Eigentlich schon da dieses nicht auf der Platte gespeichert wird und somit auch nach dem schließen nicht verwendet werden kann und eigentlich nicht ausgelesen werden kann.



  • Wer sagt, dass es nicht auf der Festplatte gespeichert wird? Das ist eine Annahme, die zutreffen kann, aber nicht muss. Außerdem ist es völlig irrelevant, denn du hast recht, wenn du kein vernünftiges Datum zur Löschung des Cookies angibst, wird dieses nur so lange zum Server gesendet, wie die aktuelle Session aktiv ist (wie das intern geregelt wird ist unterschiedlich und nicht von belang).



  • Warum ist das so wichtig, ob ein Cookie in ner Datei landet oder ob es im Speicher verbleibt? Da es als ganz normaler Header gesendet wird, kann man es sowohl abfangen, als auch emulieren...

    Fazit: Kekse sind NICHT sicher!

    Gruß Jens



  • Klar kannst alles Abfangen.
    Wenn du keine Zeit setzt dann existier das Cookie nur temporär und ist beim schließen des Browsers nicht mehr da. Somit kann es nicht ausgelesen werden.
    Wie willst du aber sonst einen User identifizieren?
    HTTP ist verbindungsloses Protokoll.



  • Es sagt ja niemand, dass du keine Session-ID (zur Not auch eine User-ID - muss dann aber sicher sein nicht einfach nur 1, 2, 3, ... sondern vielleicht ein md5)! Du solltest aber eben nicht irgendwelche Werte direkt im Cookie speichern, da sie verhältnismäßig einfach manipulierbar sind, sondern nur eine dieser IDs 🙂



  • Ich speicher nur die userid um aus der DB dann immer die restlichen Daten bei der nächsten Seite zu bekommen.
    Das wollte ich mir aber ersparen da bei jedem aufruf ein Zugriff auf die DB erfolgen muss.
    Wie macht das eigentlich PHP mit den Sessionvariablen.
    Haben die da einen eigenen Server oder ließt er sie jedesmal aus einer Tempdatei?



  • Ich speicher nur die userid um aus der DB dann immer die restlichen Daten bei der nächsten Seite zu bekommen.

    Warum speicherst du dann nicht eine Session-ID 😕

    Das wollte ich mir aber ersparen da bei jedem aufruf ein Zugriff auf die DB erfolgen muss.
    Wie macht das eigentlich PHP mit den Sessionvariablen.
    Haben die da einen eigenen Server oder ließt er sie jedesmal aus einer Tempdatei?

    Imho werden die jedesmal neu gelesen 🙄



  • Session_ID müsste ich erst generieren und den Source will ich mir ersparen oder hast du einen für mich.
    😉



  • Für C++ nicht, aber mit PHP kannst du es z.B. folgendermaßen machen:

    $sess_id = md5(uniqid(rand()));
    

  • Mod

    Original erstellt von Unix-Tom:
    Session_ID müsste ich erst generieren und den Source will ich mir ersparen oder hast du einen für mich.
    😉

    du brauchst eine Session ID - zumindest wenn du nicht willst, dass sich jemand als Admin oder ähnliches ausgibt.

    Bei meiner CGI Library mach ich es so:

    Ich habe eine Ordner Session (worauf nur mein Script zugriff hat)
    in diesem Ordner liegen 2 dateien:
    session
    session_lock

    jedes script dass eine Session braucht lockt mal session_lock (solange session_lock gelockt ist, kann kein anderes script mit den sessions rumspielen)
    dann liest es alle daten aus session aus -> die form der daten ist folgendermaßen:

    session_id time_stamp
    wobei das script dann alle sessions löscht wo der timestamp älter als X ist.

    die session_id wird wie folgt verwendet:
    es gibt einen unterordner session_dats
    hier gibt es für jede session eine datei die genauso wie die session_id heißt - da stehen alle session daten drinnen.

    session id generiert sich dann so:
    md5(timestamp + laufzeit) (uU kommt noch ein xor IP dazu - da bin ich mir noch nicht sicher)
    dann wird geschaut ob die session_id schon existiert (es stehen ja alle session ids in der session datei drinnen)
    wenn sie schon vorhanden ist, dann wird die id halt nochmal generiert (da sich ja laufzeit verändert hat)

    als sicherung speicher ich zusätzlich noch die IP vom user in der session - wenn der User zwar die richtige session_id hat, aber die falsche IP dann bekommt er die session trotzdem nicht.

    falls du denkst, dass das alles overengineering ist, dann bedenke folgendes:
    es gibt genug Leute denen fad ist. Und es gibt nix einfacheres als cookies zu manipulieren - eine session ID zu raten ist sicher lustig.

    Sollte deine Lösung aber nur fürs (Firmeninterne) Intranet sein - dann reicht das mit dem Cookie natürlich auch - denn diese ganzen Sicherungen macht man quasi nur für Leuten denen fad ist... (die haben dann meistens nichtmal böse absichten - aber wenn sie dann die sensiblen daten haben, dann ist es ja egal ob sie sie mit vorsatz oder nicht bekamen...)



  • Original erstellt von Shade Of Mine:
    **
    Bei meiner CGI Library mach ich es so...
    **

    Kann man die schon sehen? Ich bin grade auf der Suche nach einer C++-CGI-Lib und habe noch nichts passendes gefunden...

    Danke!

    Peanut


  • Mod

    Original erstellt von Peanut:
    **Kann man die schon sehen? Ich bin grade auf der Suche nach einer C++-CGI-Lib und habe noch nichts passendes gefunden...
    **

    die ist noch viel zu unstable
    und ich habe kaum zeit sie weiterzuentwickeln

    aber schau dir mal
    CGI++
    CGICC
    CGIXX

    an - die sind recht gut (aber AFAIK gibts keine Lib die Sessions kann)



  • ich wärm das thema ja ungern auf, aber muss man überhaupt daten beim clienten speichern?
    Man kann doch auch gewisse daten des clienten nutzen um einen fingerabdruck zu erstellen und dann anhand dessen die session zu laden
    als daten könnte man z.b. ip, browser, ident, etc. nehmen um so einen fingerabdruck zu generieren


Anmelden zum Antworten