Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cookies CookieContainer数据丢失,为什么?[C,网页表格]_Cookies_Httpwebrequest_Httpwebresponse_Cookiecontainer - Fatal编程技术网

Cookies CookieContainer数据丢失,为什么?[C,网页表格]

Cookies CookieContainer数据丢失,为什么?[C,网页表格],cookies,httpwebrequest,httpwebresponse,cookiecontainer,Cookies,Httpwebrequest,Httpwebresponse,Cookiecontainer,网页形式: <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="b

网页形式:

<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>
您必须登录才能查看http://example.com/elements/13579642/ 子页。单击Display按钮时,它应该用元素源代码填充txtBxSource,但它没有。相反,它显示了http://example.com/home/ 源代码。如果我在public void btnLogin_中移动整个代码,请单击“一切正常”,否则它不会正常工作

我的问题的解决方案是什么

问题是:一旦我开始工作,如果我把整个东西放在一个网站/网络主机上,有人通过这个网页登录http://example.com/ 并使用此小型应用程序http://example.com/ 网站会收到自己的IP还是网络主机的IP


您的问题是,当页面在post back中时,CookieContainer的信息是清晰的。您可以通过两种方式修复此问题,即创建CookieContainer的viewstate,该viewstate不会影响回发时间,或者您可以使用多个子脚本创建脚本。您可以为secound按钮的脚本创建一个separte public void,并在第一个按钮中像序列一样调用该脚本

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;
    }