HttpWebRequest & Session

  • VB.NET

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von Dodo.

    HttpWebRequest & Session

    Ich habe momentan folgendes Problem und zwar habe ich ein PHP-Skript, an dieses sende ich Informationen und bekomme andere Informationen zurück. Nun muss ich das ganze mehrmals machen, nun möchte ich das ganze in einer Session machen. Wie kann ich nun bei jedem neuen Request die Session mitgeben.
    Generier dir in deinem PHP Script ne Session und in deinem Programm ne Session ID.
    Dann schickst du deine Session ID einfach mit Post mit an das PHP Script und untersuchst erst im PHP Script ob das eine Gültige Session ist oder nicht.
    Grüße , xChRoNiKx

    Nützliche Links:
    Visual Studio Empfohlene Einstellungen | Try-Catch heißes Eisen
    Also so sieht das VB.NET Skript aus.

    VB.NET-Quellcode

    1. Imports System.IO
    2. Imports System.Net
    3. Imports System.Text
    4. Public Class Form1
    5. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    6. Dim cookies As CookieCollection = Nothing
    7. Dim request As HttpWebRequest = Nothing
    8. Dim response As HttpWebResponse = Nothing
    9. cookies = New CookieCollection()
    10. request = CType(HttpWebRequest.Create("http://localhost/httpsession/index.php"), HttpWebRequest)
    11. request.Method = "POST"
    12. request.ContentType = "application/x-www-form-urlencoded"
    13. request.CookieContainer = New CookieContainer()
    14. request.CookieContainer.Add(cookies)
    15. Dim Post As String = "action=start"
    16. Dim byteArray() As Byte = Encoding.UTF8.GetBytes(Post)
    17. request.ContentLength = byteArray.Length
    18. Dim DataStream As Stream = request.GetRequestStream()
    19. DataStream.Write(byteArray, 0, byteArray.Length)
    20. DataStream.Close()
    21. response = CType(request.GetResponse(), HttpWebResponse)
    22. DataStream = response.GetResponseStream()
    23. Dim reader As New StreamReader(DataStream)
    24. Dim ServerResponse As String = reader.ReadToEnd()
    25. reader.Close()
    26. DataStream.Close()
    27. If response.Cookies IsNot Nothing AndAlso response.Cookies.Count <> 0 Then
    28. For Each cookie As Cookie In response.Cookies
    29. MessageBox.Show(cookie.ToString)
    30. cookies = response.Cookies
    31. Next
    32. Else
    33. MessageBox.Show("no Cookie")
    34. End If
    35. response.Close()
    36. Console.WriteLine(ServerResponse)
    37. request = CType(HttpWebRequest.Create("http://localhost/httpsession/index.php"), HttpWebRequest)
    38. request.Method = "POST"
    39. request.ContentType = "application/x-www-form-urlencoded"
    40. request.CookieContainer = New CookieContainer()
    41. request.CookieContainer.Add(cookies)
    42. Post = "action=show"
    43. byteArray = Encoding.UTF8.GetBytes(Post)
    44. request.ContentLength = byteArray.Length
    45. DataStream = request.GetRequestStream()
    46. DataStream.Write(byteArray, 0, byteArray.Length)
    47. DataStream.Close()
    48. response = CType(request.GetResponse(), HttpWebResponse)
    49. DataStream = response.GetResponseStream()
    50. reader = New StreamReader(DataStream)
    51. ServerResponse = reader.ReadToEnd()
    52. reader.Close()
    53. DataStream.Close()
    54. Console.WriteLine(ServerResponse)
    55. End Sub
    56. End Class


    Und so das PHP-Skript.

    PHP-Quellcode

    1. <?php
    2. If ($_POST['action'] == 'start') {
    3. session_start();
    4. $sid = session_id();
    5. $_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];
    6. echo $sid;
    7. }
    8. If ($_POST['action'] == 'show') {
    9. echo $_SESSION['ip'];
    10. }
    11. ?>


    Beim 2. Aufruf sollte eigentlich die IP ausgegeben werden, aber es wird nichts ausgegeben
    Hay,
    versuch's mal so:

    VB.NET-Quellcode

    1. Imports System.Net, System.IO, System.Text.RegularExpressions
    2. Public Class Form1
    3. Private Containa As CookieContainer = New CookieContainer
    4. Private Function Req(ByVal Site As String, ByVal P As String) As String
    5. Dim R As HttpWebRequest = HttpWebRequest.Create(Site)
    6. R.Method = "POST"
    7. R.CookieContainer = Containa
    8. R.AllowAutoRedirect = True
    9. R.Headers("useragent") = "Mozilla/5.0 (Windows; U; Windows NT 6.1; de; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8"
    10. R.ContentType = "application/x-www-form-urlencoded"
    11. Dim Post As String = P
    12. R.ContentLength = Post.Length
    13. Dim Writer As New StreamWriter(R.GetRequestStream(), System.Text.Encoding.Default)
    14. Writer.Write(Post)
    15. Writer.Close()
    16. Dim Reader As New StreamReader(R.GetResponse.GetResponseStream())
    17. Dim Response As String = Reader.ReadToEnd
    18. Reader.Close()
    19. Return Response
    20. End Function


    Aufrufbeispiele:

    VB.NET-Quellcode

    1. Dim Test As String = Req("http://deinftp...", "action=show")
    2. RichTextBox1.Text = Test ' zum kontrollieren


    oder

    VB.NET-Quellcode

    1. Dim Test2 As String = Req("http://deinftp.." , "action=start")




    Mfg Kevin.
    Wenn du statt Sessions Cookies benutzt, kannst du bei jedem neuen WebRequest den CookieContainer übergeben.

    Edit:
    Oh, das tust du ja auch.
    Warum benutzt du dann nicht setcookie() und $_COOKIE['abc'] ?
    Von meinem iPhone gesendet

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „nikeee13“ ()

    Nein für die Session ID kann man Cookies benutzen damit kann so ohne weiteres eh niemand was mit anfangen, aber falls du irgendwelche Daten Temprär speichern willst wie Benutzername, Passwort, Rechte oder sonst irgendwas, würde ich dafür natürlich eine Session nehemen, weil die kann niemand einsehen. Du übergibt dann nur die Session ID und das PHP Script sucht sich die notwendigen Daten aus der Session heraus und verarbeitet sie weiter.

    Zur Sicherheit würde ich dann auch die IP mit in der Session speichern um noch mal eine Absicheurng zu haben, sofern jemand die Session ID heraus bekommt könnte er sie einfach an das Script hängen und somit auch die Ausgabe bekommen die er eigentlich nicht sehen sollte. Wenn du aber vorher die IP mit in der Session gespeichert hast wird einem angreifer wieder ein größerer Stein in Weg gelegt.