Witam kolegów i koleżanki,
Zacząłem ostatnio kombinować w C# z Cookiesami i mam problem, poniżej wstawiam kod:
test.php - wyświetla albo formularz albo nazwę użytkownika z cookie
<?php
if (isset($_COOKIE['imie']))
{
$imie = $_COOKIE['imie'];
}
?>
<?php echo 'Witaj ';?>
<?php
if (empty($imie))
{
<<<<WYŚWIETLENIE FORMULARZA LOGOWANIA>>>>
}
else
{
echo $imie;
}
?>
test2.php - ustawia cookie
<?php
$imie = trim($_POST["imie"]);
setcookie("imie", $imie, time()+120*60, '/','mars.iti.pk.edu.pl');
?>
W IE i Mozilli wszystko działa, w C# działa połowicznie
cookieJar = new CookieContainer();
string url = "http://mars.iti.pk.edu.pl/~teres/test2.php";
string postData = "imie=teres&submit=Wyslij";
byte[] byteArray = Encoding.UTF8.GetBytes(postData);
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "POST";
request.UserAgent = "User-Agent: Mozilla/4.0";
request.Referer = "";
request.CookieContainer = cookieJar;
request.KeepAlive = false;
request.Accept = "*/*";
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = postData.Length;
Stream dataStream = request.GetRequestStream();
dataStream.Write(byteArray, 0, byteArray.Length);
dataStream.Close();
request.GetResponse();
Dostaję w odpowiedzi cookie i cookieJar.Count = 1
HttpWebRequest request2 = (HttpWebRequest)WebRequest.Create("http://mars.iti.pk.edu.pl/~teres/test.php");
request2.Method = WebRequestMethods.Http.Get;
request2.UserAgent = "User-Agent: Mozilla/4.0";
request2.CookieContainer = cookieJar;
//request2.CookieContainer.Add(new Cookie("imie","teres","/","mars.iti.pk.edu.pl"));
request2.KeepAlive = false;
request2.Accept = "*/*";
request2.GetResponse();
i du*a, nie mam pojęcia dlaczego nie wysyła ciasteczka :-( Jeśli odkomentuję linijkę dodającą ręcznie ciacho (cookieJar.Count=2), to działa.
Pomaga dopisanie linijki cookieJar.Add(response.Cookies) pomiędzy requestami. Czy ciasteczka trzeba dołączać ręcznie z odpowiedzi (response)?
Ten kod działa, ale czy ciacha trzeba dodawać ręcznie z WebResponse ?
private void button2_Click(object sender, EventArgs e)
{
string url = "http://mars.iti.pk.edu.pl/~teres/test2.php";
string postData = "imie=teres&submit=Wyslij";
byte[] byteArray = Encoding.UTF8.GetBytes(postData);
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "POST";
request.UserAgent = "User-Agent: Mozilla/4.0";
request.Referer = "";
request.CookieContainer = cookieJar;
request.KeepAlive = false;
request.Accept = "*/*";
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = postData.Length;
Stream dataStream = request.GetRequestStream();
dataStream.Write(byteArray, 0, byteArray.Length);
dataStream.Close();
request.GetResponse();
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
response.Close();
cookieJar.Add(response.Cookies);
}
private void button3_Click(object sender, EventArgs e)
{
string url = "http://mars.iti.pk.edu.pl/~teres/test.php";
HttpWebRequest request2 = (HttpWebRequest)WebRequest.Create(url);
request2.Method = WebRequestMethods.Http.Get;
request2.UserAgent = "User-Agent: Mozilla/4.0";
request2.Referer = url;
request2.CookieContainer = cookieJar;
request2.KeepAlive = false;
request2.Accept = "*/*";
HttpWebResponse response = (HttpWebResponse)request2.GetResponse();
Stream responseStream = response.GetResponseStream();
StreamReader responseStreamReader = new StreamReader(responseStream);
textBox1.AppendText(responseStreamReader.ReadToEnd() + "\r\n");
responseStreamReader.Close();
responseStream.Close();
response.Close();
}