Данные CookieContainer теряются, почему? [C#, веб-форма]
Веб-форма:
<form id="form1" runat="server">
<div>
<asp:TextBox ID="txtBxEmail" runat="server"></asp:TextBox>
<asp:TextBox ID="txtBxPassword" runat="server"></asp:TextBox>
<asp:Button ID="btnLogin" runat="server" Text="Login" OnClick="btnLogin_Click" />
<br /><br />
<asp:TextBox ID="txtBxLink" runat="server" Text="http://example.com/elements/13579642/"></asp:TextBox>
<asp:Button ID="btnDisplay" runat="server" Text="Display" OnClick="btnDisplay_Click" />
<br /><br />
<asp:TextBox ID="txtBxSource" runat="server" TextMode="MultiLine" Width="600" Height="600"></asp:TextBox>
</div>
</form>
Код позади:
protected void Page_Load(object sender, EventArgs e)
{
}
CookieContainer loginCookie;
public void btnLogin_Click(object sender, EventArgs e)
{
string postData = "type=0&user=" + txtBxEmail.Text + "&password=" + txtBxPassword.Text + "&remember=0";
CookieContainer tempCookies = new CookieContainer();
UTF8Encoding encoding = new UTF8Encoding();
byte[] byteData = encoding.GetBytes(postData);
HttpWebRequest postReq = (HttpWebRequest)WebRequest.Create("http://example.com/ajax/login.ajax.php");
postReq.Method = "POST";
postReq.KeepAlive = true;
postReq.CookieContainer = tempCookies;
postReq.ContentType = "application/x-www-form-urlencoded";
postReq.Referer = "http://example.com/ajax/login.ajax.php";
postReq.UserAgent = "Opera/9.80 (Windows NT 6.1; U; en) Presto/2.10.229 Version/11.61";
postReq.ContentLength = byteData.Length;
Stream postreqstream = postReq.GetRequestStream();
postreqstream.Write(byteData, 0, byteData.Length);
postreqstream.Close();
HttpWebResponse postresponse = null;
postresponse = (HttpWebResponse)postReq.GetResponse();
tempCookies.Add(postresponse.Cookies);
loginCookie = tempCookies;
StreamReader postreqreader = new StreamReader(postresponse.GetResponseStream());
}
public void btnDisplay_Click(object sender, EventArgs e)
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(txtBxLink.Text);
request.CookieContainer = loginCookie;
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
StreamReader reader = new StreamReader(response.GetResponseStream());
string linkSourceCode = reader.ReadToEnd();
txtBxSource.Text = linkSourceCode;
}
Вы должны войти в систему, чтобы увидеть http://example.com/elements/13579642/ подстраницу. При нажатии на кнопку " Показать" должно появиться txtBxSource
с исходным кодом элементов, но это не так. Вместо этого он показывает http://example.com/home/ исходный код. Если я переместить весь код в public void btnLogin_Click
все работает, иначе нет.
Каково было бы решение моей проблемы?
Вопрос: Как только я заставлю его работать, если я помещу все это на веб-сайт / веб-хостинг, и кто-то войдет (через эту веб-страницу) на веб-сайт http://example.com/ и использует это мини-приложение, http: //example.com/ сайт получит свой собственный IP или IP-адрес веб-хостинга?
1 ответ
Проблема, с которой вы столкнулись, заключается в том, что когда страница находится в посте, информация о CookieContainer становится ясной. Вы можете исправить это двумя способами, создав состояние просмотра CookieContainer, которое не повлияет на обратную передачу, или вы можете создать сценарий с несколькими вложенными сценариями. Вы можете создать отдельную публичную пустоту для скрипта кнопки secound и вызвать этот скрипт в первой кнопке как Sequence.