【c#】程式控制post資料 需登陸後保持session的方法
阿新 • • 發佈:2019-01-06
最近在寫一個網頁遊戲的輔助工具。就來說說程式控制多次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; } }