none
Session - Cookie verwenden RRS feed

  • Frage

  • Hallo,

    ich steh hier gerade vor einem "Problem":

    Ich habe ein Application welche automatisiert ein Webformular ausfüllt (POST-Methode [PHP]). Dies funktioniert auch ausgezichnet.

    Doch diese besagete Seite kann man nur aufrufen wenn man sich zuvor angemeldet hat. Bei dieser Anmeldung wird ein (SM)Session-Cookie geschrieben. [SM steht für SiedeMider]

    Wie kann ich einen (LoginSession)-Cookie so verwenden wie es z.B. der IE auch tut ? Das ich über eine bestimmte Zeit angemeldet bleibe.

    Ich hoffe ihr versteht meine Fragestellung :).

    Vielen Dank

    Stephan Traub

    Mittwoch, 7. Juli 2010 08:19

Antworten

  • Hallo Stephan,
    Doch diese besagete Seite kann man nur aufrufen wenn man sich zuvor angemeldet hat. Bei dieser Anmeldung wird ein (SM)Session-Cookie geschrieben. [SM steht für SiedeMider]

    Wie kann ich einen (LoginSession)-Cookie so verwenden wie es z.B. der IE auch tut ? Das ich über eine bestimmte Zeit angemeldet bleibe.

    Bei einem "SM" Cookie ist alles klar, das kann ja nur mit schmerzen verbunden sein :)

    Ne, im Ernst. Arbeitet die Webanwendung mit einem Sessioncookie oder mit einem Url Parameter wie bspw. xyz.php?phpsessid=12345678 (oder ähnlichem)?

    Wenn es ein Sessioncookie ist, musst Du die Rückantwort der Loginseite auslesen, merken und bei folgenden Requests wieder mit senden.

    Dim SessionCookie As String
      SessionCookie = <HttpWebResponse>.Headers( System.Net.HttpResponseHeader.SetCookie )
      ...

    Siehe dazu auch:

      http://msdn.microsoft.com/de-de/library/system.net.httpwebresponse.aspx

      http://msdn.microsoft.com/de-de/library/system.net.httpresponseheader.aspx

     


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
    • Als Antwort markiert Stephan T._ Mittwoch, 7. Juli 2010 14:50
    Mittwoch, 7. Juli 2010 08:33
    Moderator

Alle Antworten

  • Hallo Stephan,
    Doch diese besagete Seite kann man nur aufrufen wenn man sich zuvor angemeldet hat. Bei dieser Anmeldung wird ein (SM)Session-Cookie geschrieben. [SM steht für SiedeMider]

    Wie kann ich einen (LoginSession)-Cookie so verwenden wie es z.B. der IE auch tut ? Das ich über eine bestimmte Zeit angemeldet bleibe.

    Bei einem "SM" Cookie ist alles klar, das kann ja nur mit schmerzen verbunden sein :)

    Ne, im Ernst. Arbeitet die Webanwendung mit einem Sessioncookie oder mit einem Url Parameter wie bspw. xyz.php?phpsessid=12345678 (oder ähnlichem)?

    Wenn es ein Sessioncookie ist, musst Du die Rückantwort der Loginseite auslesen, merken und bei folgenden Requests wieder mit senden.

    Dim SessionCookie As String
      SessionCookie = <HttpWebResponse>.Headers( System.Net.HttpResponseHeader.SetCookie )
      ...

    Siehe dazu auch:

      http://msdn.microsoft.com/de-de/library/system.net.httpwebresponse.aspx

      http://msdn.microsoft.com/de-de/library/system.net.httpresponseheader.aspx

     


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
    • Als Antwort markiert Stephan T._ Mittwoch, 7. Juli 2010 14:50
    Mittwoch, 7. Juli 2010 08:33
    Moderator
  • Hallo,

    danke für die schnelle Antwort! So etwas in der Art habe ich mir schon gedacht.

    private string HttpPost(string p1, string p2, string p3, string p4)
    		{
    			
    			string URI = "https://.../ssl-test/delivery.php";
    			
    			string Parameters = "reissued="+p4+"&eon="+p2+"&ion="+p3+"&crtfile="+p1;
    			HttpWebRequest req = (HttpWebRequest)WebRequest.Create(URI); 
      			req.ContentType = "application/x-www-form-urlencoded";
      			req.Method = "POST";
    	
      			
          ASCIIEncoding encoding = new ASCIIEncoding();
          byte[] byte1 = encoding.GetBytes(Parameters); 
          
      			req.ContentLength = byte1.Length;
      			
      			Stream newStream = req.GetRequestStream();
          newStream.Write(byte1, 0, byte1.Length);
      			newStream.Close ();
    
      			System.Net.WebResponse resp = req.GetResponse();
      			if (resp== null) return null;
    			
    			Thread.Sleep(1000);
      			System.IO.StreamReader sr = new System.IO.StreamReader(resp.GetResponseStream());
      			//Debug
      			webBrowser1.DocumentText = sr.ReadToEnd().Trim().ToString();
      			
      			MessageBox.Show(sr.ReadToEnd().Trim().ToString());
      			test();  			
      			return sr.ReadToEnd().Trim();
    		}		

    Hier mal meine Post-Klasse.

    Es handelt sich um ein Sessioncookie - Wie kann ich jetzt die rückantwort einbauen bei jedem Request ?

    Gruß

    Mittwoch, 7. Juli 2010 13:30
  • Hallo Stephan,
    Es handelt sich um ein Sessioncookie - Wie kann ich jetzt die rückantwort einbauen bei jedem Request ?

    req.Headers.Add( "<Headername>", "<Headerwert>" )

    bzw.

    req.Headers.Add( "Cookie", "<Cookieinhalt>" )

    (Kommt darauf an, was genau das PHP Skript erwartet)

    Aber zuvor musst Du den Wert nach dem Login schon noch auslesen, das sehe ich in deinem Code nirgends.

     


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
    Mittwoch, 7. Juli 2010 14:34
    Moderator
  • Ok ja habe ihn gerade angepasst.

    Werds mal so mal versuchen.

    Danke für die Hilfe. Jetzt komme ich (vielleicht) selber zurecht.

     

    Gruß und schönen Fußballabend ;)

    Mittwoch, 7. Juli 2010 14:49