none
[HELP] plusieur request RRS feed

  • Question

  • Bonjour,

    J'aimerais faire plusieur request sans perdre la session php. J'arrive a me connecter grace a une première request mais comment mettre la deuxième sans perdre la session php.

            ' Create a request using a URL that can receive a post. 
            Dim requestConnect As WebRequest = WebRequest.Create("http://xxxxxxxxxxx/updateSession.php")
            ' Set the Method property of the request to POST.
            requestConnect.Method = "POST"
            ' Create POST data and convert it to a byte array.
            Dim postDataConnect As String = ""
            Dim byteArrayConnect As Byte() = Encoding.UTF8.GetBytes(postDataConnect)
            ' Set the ContentType property of the WebRequest.
            requestConnect.ContentType = "application/x-www-form-urlencoded"
            ' Set the ContentLength property of the WebRequest.
            requestConnect.ContentLength = byteArrayConnect.Length
            ' Get the request stream.
            Dim dataStreamConnect As Stream = requestConnect.GetRequestStream()
            ' Write the data to the request stream.
            dataStreamConnect.Write(byteArrayConnect, 0, byteArrayConnect.Length)
            ' Close the Stream object.
            dataStreamConnect.Close()
            ' Get the response.
            Dim responseConnect As WebResponse = requestConnect.GetResponse()
            ' Display the status.
            Console.WriteLine("Request status : " + CType(responseConnect, HttpWebResponse).StatusDescription)
            ' Get the stream containing content returned by the server.
            dataStreamConnect = responseConnect.GetResponseStream()
            ' Open the stream using a StreamReader for easy access.
            Dim readerConnect As New StreamReader(dataStreamConnect)
            ' Read the content.
            Dim responseFromServerConnect As String = readerConnect.ReadToEnd()
            ' Display the content.
    
    
            Console.WriteLine(responseFromServerConnect)
    
            ' Clean up the streams.
            readerConnect.Close()
            dataStreamConnect.Close()
    
            responseConnect.Close()
    
            Console.ReadLine()
    
    

    Merci beaucoup

    Maxigolo

    dimanche 5 février 2012 12:31

Réponses

  • Bonjour,

    Pour cela il faut récupérer le cookie de session de la première session et le renvoyer dans le deuxième :

    Dans la classe HttpWebResponse, vous disposez d'une propriété Cookies :

    '.... 
    Dim responseConnect As HttpWebResponse = requestConnect.GetResponse()
    ' Récupérer l'ID de session
    Dim sessionId As String = responseConnect.Cookies("<sessionPHP>").Value
    

    Ensuite dans la deuxième requête, renvoyer l'ID de session :

    ' Utiliser l'ID de session
    Dim requestConnect As HttpWebRequest = WebRequest.Create("http://xxxxxxxxxxx/updateSession.php")
    requestConnect.CookieContainer.Add(New Cookie("<sessionPHP>", sessionId))
    

    Cependant je ne sais pas le nom du cookie pour l'identifiant de session. Pour trouver ce nom, essayez d'exécuter une requête et de regarder tous les noms des cookies de la propriété "Cookies". Remplacez "<sessionPHP>" par le nom du cookie de session PHP.

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte .NET/Consultant/Formateur chez Winwise
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5
    dimanche 5 février 2012 15:30
    Modérateur
  • Bonjour,

    Autant pour moi... Je n'avais pas testé le code.

    Je doit utiliser PHPSESSID comme nom de cookie ?
    Tout à fait ! Et utilisez la valeur de ce cookie dans la deuxième session.

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte .NET/Consultant/Formateur chez Winwise
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5
    dimanche 5 février 2012 18:08
    Modérateur

Toutes les réponses

  • Bonjour,

    Pour cela il faut récupérer le cookie de session de la première session et le renvoyer dans le deuxième :

    Dans la classe HttpWebResponse, vous disposez d'une propriété Cookies :

    '.... 
    Dim responseConnect As HttpWebResponse = requestConnect.GetResponse()
    ' Récupérer l'ID de session
    Dim sessionId As String = responseConnect.Cookies("<sessionPHP>").Value
    

    Ensuite dans la deuxième requête, renvoyer l'ID de session :

    ' Utiliser l'ID de session
    Dim requestConnect As HttpWebRequest = WebRequest.Create("http://xxxxxxxxxxx/updateSession.php")
    requestConnect.CookieContainer.Add(New Cookie("<sessionPHP>", sessionId))
    

    Cependant je ne sais pas le nom du cookie pour l'identifiant de session. Pour trouver ce nom, essayez d'exécuter une requête et de regarder tous les noms des cookies de la propriété "Cookies". Remplacez "<sessionPHP>" par le nom du cookie de session PHP.

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte .NET/Consultant/Formateur chez Winwise
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5
    dimanche 5 février 2012 15:30
    Modérateur
  • Merci pour votre réponse, mais je ne comprend se que je doit mettre dans le nom.

    Merci beaucoup

    dimanche 5 février 2012 16:25
  • Bonjour,

    Le nom du cookie qui contient l'identifiant de session PHP.

    Faites une requête sur le serveur PHP, affichez tous les nom de cookies (dans un fichier par exemple) :

            For Each cookie In responseConnect.Cookies
                File.AppendAllText("C:\Temp\Cookies.txt", cookie.Name + "=" + cookie.Value)
            Next
    

    Si vous ne savez pas quelle nom choisir, envoyez nous le contenu du fichier.

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte .NET/Consultant/Formateur chez Winwise
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5
    dimanche 5 février 2012 16:49
    Modérateur
  • Je n'est aucune reponse en utilisant ce code :
     
    Imports System
    Imports System.IO
    Imports System.Net
    Imports System.Text
    
    Module Module1
    
        Sub Main()
    
            ' Create a request using a URL that can receive a post. 
            Dim requestConnect As WebRequest = WebRequest.Create("http://**********/index.php")
            ' Set the Method property of the request to POST.
            requestConnect.Method = "POST"
            ' Create POST data and convert it to a byte array.
            Dim postDataConnect As String = "connexion_active=yes&connexion_username=******&connexion_password=***"
            Dim byteArrayConnect As Byte() = Encoding.UTF8.GetBytes(postDataConnect)
            ' Set the ContentType property of the WebRequest.
            requestConnect.ContentType = "application/x-www-form-urlencoded"
            ' Set the ContentLength property of the WebRequest.
            requestConnect.ContentLength = byteArrayConnect.Length
            ' Get the request stream.
            Dim dataStreamConnect As Stream = requestConnect.GetRequestStream()
            ' Write the data to the request stream.
            dataStreamConnect.Write(byteArrayConnect, 0, byteArrayConnect.Length)
            ' Close the Stream object.
            dataStreamConnect.Close()
            ' Get the response.
            Dim responseConnect As HttpWebResponse = requestConnect.GetResponse()
            
            For Each cookie In responseConnect.Cookies
    
                Console.WriteLine(cookie.Name + "=" + cookie.Value)
    
            Next
            ' Display the status.
            Console.WriteLine("Request status : " + CType(responseConnect, HttpWebResponse).StatusDescription)
            ' Get the stream containing content returned by the server.
            dataStreamConnect = responseConnect.GetResponseStream()
            ' Open the stream using a StreamReader for easy access.
            Dim readerConnect As New StreamReader(dataStreamConnect)
            ' Read the content.
            Dim responseFromServerConnect As String = readerConnect.ReadToEnd()
            ' Display the content.
    
            ' Clean up the streams.
            readerConnect.Close()
            dataStreamConnect.Close()
    
            responseConnect.Close()
    
            Console.ReadLine()
    
        End Sub
    
    
        
    End Module
    
    

    • Modifié Maxigolo dimanche 5 février 2012 17:44
    dimanche 5 février 2012 17:07
  • Bonjour,

    Je n'est aucune reponse en utilisant ce code :
    C'est à dire ? Pouvez-vous être plus explicit ?

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte .NET/Consultant/Formateur chez Winwise
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5
    dimanche 5 février 2012 17:35
    Modérateur
  • Je voulais dire par "Je n'est aucune reponse en utilisant ce code :" pas de retour qui affiche le nom et valeur des cookies, mais j'ai rajouter request.CookieContainer = New CookieContainer()

    et je obtient :

     

    Je doit utiliser PHPSESSID comme nom de cookie ?

    Merci beaucoup

    dimanche 5 février 2012 17:41
  • Bonjour,

    Autant pour moi... Je n'avais pas testé le code.

    Je doit utiliser PHPSESSID comme nom de cookie ?
    Tout à fait ! Et utilisez la valeur de ce cookie dans la deuxième session.

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte .NET/Consultant/Formateur chez Winwise
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5
    dimanche 5 février 2012 18:08
    Modérateur
  • Merci beaucoup tout fonctionne parfaitement :D
    dimanche 5 février 2012 18:09