最近在写一个网页游戏的辅助工具。就来说说程序控制多次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;
}
}