Autor |
Beitrag |
csharpbeginner202
Hält's aus hier
Beiträge: 13
|
Verfasst: Mi 13.06.12 12:39
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) { WebRequest webRequest = WebRequest.Create (url); webRequest.ContentType = "application/x-www-form-urlencoded"; webRequest.Method = "POST"; byte[] bytes = Encoding.ASCII.GetBytes (parameters); Stream os = null; try { webRequest.ContentLength = bytes.Length; os = webRequest.GetRequestStream(); os.Write (bytes, 0, bytes.Length); } catch (WebException ex) { MessageBox.Show ( ex.Message, "HttpPost: Request error", MessageBoxButtons.OK, MessageBoxIcon.Error ); } finally { if (os != null) { os.Close(); } } try { 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; } } |
Teil des PHP-Quellcodes von login.php:
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 Kha: C#-Tags hinzugefügtModeriert von Christian S.: Topic aus C# - Die Sprache verschoben am Mi 13.06.2012 um 19:28
|
|
Kha
Beiträge: 3803
Erhaltene Danke: 176
Arch Linux
Python, C, C++ (vim)
|
Verfasst: 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
Hält's aus hier
Beiträge: 13
|
Verfasst: 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
Hält's aus hier
Beiträge: 13
|
Verfasst: 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
Beiträge: 3803
Erhaltene Danke: 176
Arch Linux
Python, C, C++ (vim)
|
Verfasst: 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
Hält's aus hier
Beiträge: 13
|
Verfasst: 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:
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 Christian S.: C#-Tags hinzugefügt
|
|
Christian S.
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: 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
Hält's aus hier
Beiträge: 13
|
Verfasst: 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.
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: 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
Hält's aus hier
Beiträge: 13
|
Verfasst: Mi 13.06.12 23:12
Christian S. hat folgendes geschrieben : | 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:
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| string HttpPost (string url, string parameters) { 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 Christian S.: C#-Tags hinzugefügt
Zuletzt bearbeitet von csharpbeginner202 am Do 14.06.12 00:00, insgesamt 1-mal bearbeitet
|
|
Christian S.
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: 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.
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
csharpbeginner202
Hält's aus hier
Beiträge: 13
|
Verfasst: 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.
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: 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
Hält's aus hier
Beiträge: 13
|
Verfasst: Mi 13.06.12 23:40
Gut,
Ich schau mir das ein anderes mal an.
Ist schon spät.
|
|
csharpbeginner202
Hält's aus hier
Beiträge: 13
|
Verfasst: Mi 13.06.12 23:59
Das komische ist, dass request
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 Christian S.: C#-Tags hinzugefügt
|
|
Christian S.
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: 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".
|
|