Autor Beitrag
csharpbeginner202
Hält's aus hier
Beiträge: 13



BeitragVerfasst: Mi 13.06.12 12:39 
ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
void BtLoginClick(object sender, EventArgs e)
    {
      string url = "login.php";
      string username = "user";
      string password = "test";
      string parameters = String.Format("pUser={0}&pPwd={1}&pLogin=Anmelden", username, password);
      string response=HttpPost(url, parameters);
      if (response!=null)
        MessageBox.Show(response);
      else
        MessageBox.Show("Response Error");
    }
    
    string HttpPost (string url, string parameters)
    { 
       // parameters: name1=value1&name2=value2  
       WebRequest webRequest = WebRequest.Create (url);
       //string ProxyString = 
       //   System.Configuration.ConfigurationManager.AppSettings
       //   [GetConfigKey("proxy")];
       //webRequest.Proxy = new WebProxy (ProxyString, true);
       //Commenting out above required change to App.Config
       webRequest.ContentType = "application/x-www-form-urlencoded";
       webRequest.Method = "POST";
       byte[] bytes = Encoding.ASCII.GetBytes (parameters);
       Stream os = null;
       try
       { // send the Post
          webRequest.ContentLength = bytes.Length;   //Count bytes to send
          os = webRequest.GetRequestStream();
          os.Write (bytes, 0, bytes.Length);         //Send it
       }
       catch (WebException ex)
       {
          MessageBox.Show ( ex.Message, "HttpPost: Request error"
             MessageBoxButtons.OK, MessageBoxIcon.Error );
       }
       finally
       {
          if (os != null)
          {
             os.Close();
          }
       }
     
       try
       { // get the response
          WebResponse webResponse = webRequest.GetResponse();
          if (webResponse == null
             { return null; }
          StreamReader sr = new StreamReader (webResponse.GetResponseStream());
          return sr.ReadToEnd ().Trim ();
       }
       catch (WebException ex)
       {
          MessageBox.Show ( ex.Message, "HttpPost: Response error"
             MessageBoxButtons.OK, MessageBoxIcon.Error );
       }
       return null;
    } // end HttpPost 
  }

Teil des PHP-Quellcodes von login.php:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
if (isset($_POST['pLogin']))    // Login-Button geklickt?
            {
                $user=$_POST['pUser'];  // Formulardaten auslesen
                $pwd=$_POST['pPwd'];
                if ($user=="user" && $pwd=="test")    // richtige Zugangsdaten?
                {
                    // Login erfolgreich
                   session_start();
                   <span style="color: red"> $_SESSION['Login_OK']=true;</span>
                    $_SESSION['Benutzername']=$user;
                    header("Location: privat.php"); // weiterleiten zu "privat.php"
                }
            }


Teil des PHP-Quellcodes von privat.php:
session_start();
// session_destroy();
if (isset($_SESSION['Login_OK']))
{
echo "<p><b>".$_SESSION['Benutzername']." Sie haben sich erfolgreich für den internen Bereich authentifiziert. <font color='green'>Permission allowed!</font><br>Ihre aktuelle Session-ID lautetet '".session_id()."'</b></p>";
}
else header("Location: login.php");

Problembeschreibung
Das Problem liegt darin, dass in login.php überprüft wird, ob es sich um den richtigen Nutzer handelt. Wenn ja, dann wird die Session gestartet und $_SESSION['Login_OK']=true; gesetzt. Danach wird auf privat.php weitergeleitet (funktioniert).
Das Problem liegt darin, dass $_SESSION['Login_OK']=true; auf privat.php plötzlich nicht mehr verfügbar ist, und somit mittels else header("Location: login.php"); zu login.php zurückgeleitet wird.
Übrigens, die Sessions funktionieren, wenn man sich über den Browser einloggt.

DANKE für Deine Hilfe

Moderiert von user profile iconKha: C#-Tags hinzugefügt
Moderiert von user profile iconChristian S.: Topic aus C# - Die Sprache verschoben am Mi 13.06.2012 um 19:28
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Mi 13.06.12 14:00 
Wie soll der zweite Request auch von der Session des ersten etwas wissen ;) ? Du musst schon das Session Cookie weiterreichen, z.B. so.

_________________
>λ=
csharpbeginner202 Threadstarter
Hält's aus hier
Beiträge: 13



BeitragVerfasst: Mi 13.06.12 20:24 
Vielen Dank für Deine schnelle Hilfe.

Ich glaube, dass mir Dein Link weiterhelfen wird.
Bin mir aber noch nicht sicher, ob er dafür ausreicht, dass ich die Lösung auch umsetzen kann.

Falls nicht frage ich nochmal nach. Ansonsten werde ich die Frage als beantwortet markieren (kann noch ein wenig dauern).

mfg
C#Beginner
csharpbeginner202 Threadstarter
Hält's aus hier
Beiträge: 13



BeitragVerfasst: Mi 13.06.12 20:38 
Wie schon gesagt vielen Dank für deine rasche Hilfe.

Leider blicke ich gerade nicht durch wie ich den Code in meinen implementieren soll.

Vielleicht kannst Du ja helfen.

Danke, ich will wenn möglich nicht noch mehr Stunden mit der Fehlersuche verbringen.
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Mi 13.06.12 20:49 
Du musst lediglich die CookieContainer-Property setzen. Schau dir den Code bitte noch einmal an, das sind nur 3 relevante Zeilen.

_________________
>λ=
csharpbeginner202 Threadstarter
Hält's aus hier
Beiträge: 13



BeitragVerfasst: Mi 13.06.12 22:17 
Danke,

aber ich erhalte ständig 'Der Name "cookieContainer" ist im aktuellen Kontext nicht vorhanden. (CS0103) - C:\Dokumente und Einstellungen\------\Eigene Dateien\SharpDevelop Projects\login\login\MainForm.cs:57,32'

verwendete namespaces:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
using System.Net;
using System.Text;
using System.IO;


Moderiert von user profile iconChristian S.: C#-Tags hinzugefügt
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Mi 13.06.12 22:20 
Hast Du die Variable denn deklariert? In dem Codeschnipsel steht ja nur eine Zuweisung.

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
csharpbeginner202 Threadstarter
Hält's aus hier
Beiträge: 13



BeitragVerfasst: Mi 13.06.12 22:43 
Ich wollte sie deklarieren, aber mir ist nicht klar an welcher Stelle und auch nicht wirklich wie.
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Mi 13.06.12 22:48 
Dann sollest Du Dich vielleicht erst einmal mit den Grundlagen beschäftigen. Das Deklarieren einer Variable gehört zu den absoluten Basics. Ein oft empfohlener Einstieg ist das OpenBook C# von Galileo.

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
csharpbeginner202 Threadstarter
Hält's aus hier
Beiträge: 13



BeitragVerfasst: Mi 13.06.12 23:12 
user profile iconChristian S. hat folgendes geschrieben Zum zitierten Posting springen:
Dann sollest Du Dich vielleicht erst einmal mit den Grundlagen beschäftigen. Das Deklarieren einer Variable gehört zu den absoluten Basics. Ein oft empfohlener Einstieg ist das OpenBook C# von Galileo.

Vielen Dank für Deine großzügige Hilfe!!!


Die Änderung auf:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
string HttpPost (string url, string parameters)
    { 
       // parameters: name1=value1&name2=value2  
       WebRequest webRequest = WebRequest.Create (url);
       HttpWebRequest request = (HttpWebRequest)webRequest;
       CookieContainer cookieContainer = new CookieContainer();
       request.CookieContainer = cookieContainer;

                   ...


oranger Teil wurde eingefügt und hat das Problem gelöst.
Allerdings ist mir leider noch nicht klar, warum das funktioniert!?

Danke an alle, die wirklich geholfen haben.

Moderiert von user profile iconChristian S.: C#-Tags hinzugefügt


Zuletzt bearbeitet von csharpbeginner202 am Do 14.06.12 00:00, insgesamt 1-mal bearbeitet
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Mi 13.06.12 23:28 
Falls Du meinen Hinweis in den falschen Hals bekommen hast, tut mir das Leid. Aber er war absolut ernst gemeint, denn wenn Du die Grundlagen nicht beherrschst, wirst Du nicht weiter kommen. :nixweiss:

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
csharpbeginner202 Threadstarter
Hält's aus hier
Beiträge: 13



BeitragVerfasst: Mi 13.06.12 23:30 
Danke,

die Grundlagen beherrsche ich sehr wohl, allerdings stand ich in diesem Fall leider sozusagen auf der Leitung.
Und wie schon gesagt, ich würde die Lösung, die ich gefunden habe gerne auch verstehen. Aber ich glaube, ich werde da auch noch dahinterkommen.

mfg
C#Beginner
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Mi 13.06.12 23:36 
In dem Beitrag, in dem der Code gepostet wurde, ist es eigentlich ganz schön erklärt: der Cookie-Container speichert die Cookies, die von einem Request gesetzt werden. Dadurch, dass Du denselben Cookie-Container auch im zweiten Request verwendest, stehen die Cookies diesem zur Verfügung - die Session bleibt erhalten.

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
csharpbeginner202 Threadstarter
Hält's aus hier
Beiträge: 13



BeitragVerfasst: Mi 13.06.12 23:40 
Gut,

Ich schau mir das ein anderes mal an.

Ist schon spät.
csharpbeginner202 Threadstarter
Hält's aus hier
Beiträge: 13



BeitragVerfasst: Mi 13.06.12 23:59 
Das komische ist, dass request

ausblenden C#-Quelltext
1:
2:
3:
   HttpWebRequest request = (HttpWebRequest)webRequest;
   CookieContainer cookieContainer = new CookieContainer();
   request.CookieContainer = cookieContainer;


später im Code niemehr vorkommt, sondern lediglich webRequest.

Daher verstehe ich die Sache nicht ganz.

Moderiert von user profile iconChristian S.: C#-Tags hinzugefügt
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Do 14.06.12 00:10 
request und webRequest verweisen ja auf dasselbe Objekt, nur dass Du bei request durch einen Cast den Typ genauer festgelegt hast. Der Typ, den WebRequest.Create zurückgibt, ist ein allgemeiner WebRequest, weil erst anhand der übergebenen URL festgelegt wird, welche Art von WebRequest erzeugt wird (siehe hier bei den Remarks).

Da Du aber weist, dass Du eine HTTP-Url übergebe hast, kannst Du den webRequest in einen spezielleren HttpWebRequest casten - Du weist ja, dass WebRequest.Create so einen erstellt hat. Machen musst Du das, weil nur ein HttpWebRequest einen Cookie-Container besitzt, den Du ja zuweisen möchtest.

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".