0

すぐにログアウトしてやり直すよりも、ウェブサイトにログインするプロジェクトを作成しています。私の問題はクッキーです。正しくログアウトして再送信する方法がよくわかりません。アプリを閉じて再起動すると、ユーザーが再びログインするため、明らかな Cookie がクリアされます。

   private void Form1_Load(object sender, EventArgs e)
    {
        WebRequest request;
        string postData;
        byte[] byteArray;
        Stream dataStream;
        while (true)
        {
            try
            {
                HttpWebRequest httpWReq = (HttpWebRequest)WebRequest.Create("http://www.********/index.php");

                ASCIIEncoding encoding = new ASCIIEncoding();
                postData = "param=example&param=0&param=bigboy";
                byte[] data = encoding.GetBytes(postData);
                httpWReq.Method = "POST";
                httpWReq.ContentType = "application/x-www-form-urlencoded";
                httpWReq.ContentLength = data.Length;
                httpWReq.KeepAlive = false;

                httpWReq.CookieContainer = new CookieContainer();
                using (Stream stream = httpWReq.GetRequestStream())
                {
                    stream.Write(data, 0, data.Length);
                    stream.Close();
                }
            }
            catch (Exception err)
            {
                Console.WriteLine(err.Message);
            }
        }
    }

このようなループ処理を実現するにはどうすればよいでしょうか?

4

1 に答える 1

0

次の疑似コードのようなものがうまくいくはずです。

ログインおよびログアウト要求で同じ CookieContainer オブジェクトを再利用することに注意してください。

static void Main(string[] args)
{
    while (true)
    {
        try
        {
            CookieContainer cookies = new CookieContainer();


            HttpWebRequest loginRequest = (HttpWebRequest)WebRequest.Create("http://www.********/index.php");
            loginRequest.CookieContainer = cookies;

            // Configure login request headers and data, write to request stream, etc.

            HttpWebResponse loginResponse = (HttpWebResponse)loginRequest.GetResponse();


            HttpWebRequest logoutRequest = (HttpWebRequest)WebRequest.Create("http://www.********/logout.php");
            logoutRequest.CookieContainer = cookies;

            // Configure logout request headers and data, write to request stream, etc.

            HttpWebResponse logoutResponse = (HttpWebResponse)logoutRequest.GetResponse();
        }
        catch (Exception err)
        {
            Console.WriteLine(err.Message);
        }
    }
}

このようなことを試してみて、どうなるか教えてください。

また: 応答オブジェクトの Cookie プロパティをデバッグしてみてください。リクエストによると、これは CookieContainer ではなくCookieCollection です。ただし、何が起こっているのかを詳しく調べる必要がある場合は、有用なデバッグ情報を提供する必要があります。例: http://goo.gl/L2MMrj

于 2013-10-17T05:03:43.880 に答える