1. 程式人生 > >【c#】程式控制post資料 需登陸後保持session的方法

【c#】程式控制post資料 需登陸後保持session的方法

最近在寫一個網頁遊戲的輔助工具。就來說說程式控制多次post資料 保持session的方法

學過網頁程式設計的都知道,session保持會話狀態,使得類似登陸功能可以連續保持。

但用程式傳送post請求的時候,session就會丟失。

究其原因,還是要看session的原理。

其實session一般都有個sessionID儲存在cookie裡。

每次請求資料都會發送上次的cookie到伺服器。

php的一般為 PHPSESSIONID

asp.net的好像是ASPNETSESSIONID

.....

其實只要把請求返回的sesionID給儲存下來。再賦值給下次要請求的request物件就OK了,只要此次session在服務端沒過期。

如下程式碼實現:

private static CookieContainer m_Cookie = new CookieContainer();
        private string post(string postURL, string postData, Encoding pageEncoding)
        {
            HttpWebRequest httpWebRequest;
            HttpWebResponse httpWebResponse;

            byte[] bytesToPost = pageEncoding.GetBytes(postData);
            try
            {
                httpWebRequest = WebRequest.Create(postURL) as HttpWebRequest;
                httpWebRequest.Method = "POST";
                httpWebRequest.KeepAlive = true;
                httpWebRequest.ContentType = "application/x-www-form-urlencoded";
                httpWebRequest.CookieContainer = m_Cookie;//設定上一個訪問頁面的cookie 保持session
                httpWebRequest.ContentLength = bytesToPost.Length;

                Stream requestStream = httpWebRequest.GetRequestStream();
                requestStream.Write(bytesToPost, 0, bytesToPost.Length);//寫入post資訊
                requestStream.Close();

                httpWebResponse = httpWebRequest.GetResponse() as HttpWebResponse;
                m_Cookie = httpWebRequest.CookieContainer;//訪問後更新cookie
                Stream responseStream = httpWebResponse.GetResponseStream();
                string resData;

                using (StreamReader resSR = new StreamReader(responseStream, pageEncoding))
                {
                    resData = resSR.ReadToEnd();
                    resSR.Close();
                    responseStream.Close();
                }
                return resData;


            }
            catch (Exception err)
            {

                throw err;
            }
        }