HttpWebRequest und Cookies

  • VB.NET

Es gibt 1 Antwort in diesem Thema. Der letzte Beitrag () ist von Ultimator.

    HttpWebRequest und Cookies

    Nabend,

    ich habe ein Problem mit der Cookieverwaltung beim HttpWebRequest. Ich kann die Cookies des Response zwar speichern und beim nächsten Request wieder anfügen und die werden auch übergeben und können ausgelesen werden.
    Da ich aber trotzdem Probleme habe mich bei diversen Seiten einzuloggen, habe ich mal eine kleine Testseite gemacht um zu testen.
    Mir ist aufgefallen das gesetzt Cookies des letzten Response nur gespeichert werden.

    Ich habe eine Seite an die Logindaten übergeben werden, nach dem Überprüfen der Daten wird ein Testcookie gesetzt und mit header("Location: xxx") auf eine andere Seite verlinkt - in meinem Fall auf die selbe Seite mit anderen Übergabe Parameter -.
    Danach werden 2 andere Cookies gesetzt. Beim letzendlichen Response kommt nur die verlinkte Seite raus und auch nur diese Cookies.
    Jedoch wenn ich das selbe Script mit dme FF aufrufe werden alle 3 Cookies richtig gesetzt, mich würde nun interessieren, wie FF den Cookie bekommt, wenn intern im Script weiterverlinkt wird.

    Hier das Script:

    PHP-Quellcode

    1. <?PHP
    2. if($_GET['login'] == "true") {
    3. $username = $_GET['username'];
    4. $password = md5($_GET['password']);
    5. if($username == "dodo" AND $password == md5("dodo")) {
    6. setcookie("test", "foo"); // dieser Cookie wird nicht gespeichert
    7. header("Location: http://localhost/vb/index.php?reg=2");
    8. exit();
    9. } else {
    10. echo "Loginname und Passwort stimmen nicht!";
    11. exit();
    12. }
    13. }
    14. if($_GET['reg'] == "2") {
    15. setcookie("username", "dodo");
    16. setcookie("sid", md5("dodo"));
    17. echo "eingeloggt";
    18. exit();
    19. }
    20. if($_COOKIE) {
    21. if($_COOKIE['username'] == "dodo") {
    22. echo "Cookie 'username' existiert";
    23. exit();
    24. } else {
    25. echo "Cookie 'username' existiert nicht";
    26. exit();
    27. }
    28. }
    29. echo "login fehlgeschlagen";
    30. ?>
    Voilà:

    VB.NET-Quellcode

    1. Dim Request As HttpWebRequest = HttpWebRequest.Create(cbUrl.Text)
    2. Request.CookieContainer = New CookieContainer()
    3. Dim Response As HttpWebResponse = Request.GetResponse
    4. Response.Cookies = Request.CookieContainer.GetCookies(Request.RequestUri)
    5. Dim Reader As IO.StreamReader = New IO.StreamReader(Response.GetResponseStream)
    6. Debug.Print(Reader.ReadToEnd())
    7. For Each SetCookie As Cookie In Response.Cookies
    8. Debug.Print(SetCookie.Name)
    9. Next


    Ausgabe:

    Direktfenster schrieb:

    eingeloggt
    test
    username
    sid


    Warum es so geht, kann ich leider nicht ganz erklären.
    Aber vielleicht kannst du es mir ja sagen ;)