ASP.NET中Session和Cookie如何使用

ASP.NET中Session和Cookie如何使用,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

成都创新互联是一家专注于成都网站设计、网站制作与策划设计,蒙自网站建设哪家好?成都创新互联做网站,专注于网站建设十多年,网设计领域的专业建站公司;建站业务涵盖:蒙自等地区。蒙自做网站价格咨询:18982081108

使用HttpWebRequest提交ASP.NET表单并保持Session和Cookie

由于种种原因,我们有时需要从互联网上抓取一些资料,有些页面可以直接打开,而有些页面必登录之后才能打开。本文介绍的是使用 HttpWebRequest 和 HttpWebResponse 自动填写提交 ASP.NET表单并保持Session和Cookie 的一个完整的例子。本文所有源代码:AutoPostWithCookies.rar

这里涉及到3个页面:MyLogin.aspx,LoginOK.htm,Default.aspx:
1)MyLogin.aspx 页面
2)LoginOK.htm 页面
3)Default.aspx 页面

提交ASP.NET表单(即完成自动登录)的代码如下:

try  {  CookieContainercookieContainer=newCookieContainer();   ///////////////////////////////////////////////////  //1.打开MyLogin.aspx页面,获得VeiwState&EventValidation  ///////////////////////////////////////////////////  //设置打开页面的参数  stringURI="http://localhost:1165/WebTest/MyLogin.aspx";  HttpWebRequestrequest=WebRequest.Create(URI)asHttpWebRequest;  request.Method="GET";  request.KeepAlive=false;   //接收返回的页面  HttpWebResponseresponse=request.GetResponse()asHttpWebResponse;  System.IO.StreamresponseStream=response.GetResponseStream();  System.IO.StreamReaderreader=newSystem.IO.StreamReader(responseStream,Encoding.UTF8);  stringsrcString=reader.ReadToEnd();   //获取页面的VeiwState  stringviewStateFlag="id=\"__VIEWSTATE\"value=\"";  inti=srcString.IndexOf(viewStateFlag)+viewStateFlag.Length;  intj=srcString.IndexOf("\"",i);  stringviewState=srcString.Substring(i,j-i);   //获取页面的EventValidation  stringeventValidationFlag="id=\"__EVENTVALIDATION\"value=\"";  i=srcString.IndexOf(eventValidationFlag)+eventValidationFlag.Length;  j=srcString.IndexOf("\"",i);  stringeventValidation=srcString.Substring(i,j-i);   ///////////////////////////////////////////////////  //2.自动填充并提交MyLogin.aspx页面  ///////////////////////////////////////////////////  //提交按钮的文本  stringsubmitButton="登录";   //用户名和密码  stringuserName="1";  stringpassword="1";   //将文本转换成URL编码字符串  viewState=System.Web.HttpUtility.UrlEncode(viewState);  eventValidation=System.Web.HttpUtility.UrlEncode(eventValidation);  submitButton=System.Web.HttpUtility.UrlEncode(submitButton);   //要提交的字符串数据。格式形如:user=uesr1&password=123 stringformatString=  "userName={0}&password={1}&loginButton={2}&__VIEWSTATE={3}&__EVENTVALIDATION={4}";  stringstringpostString=  string.Format(formatString,userName,password,submitButton,viewState,eventValidation);   //将提交的字符串数据转换成字节数组  byte[]postData=Encoding.ASCII.GetBytes(postString);   //设置提交的相关参数  request=WebRequest.Create(URI)asHttpWebRequest;  request.Method="POST";  request.KeepAlive=false;  request.ContentType="application/x-www-form-urlencoded";  request.CookieContainer=cookieContainer;  request.ContentLength=postData.Length;   //提交请求数据  System.IO.StreamoutputStream=request.GetRequestStream();  outputStream.Write(postData,0,postData.Length);  outputStream.Close();   //接收返回的页面  response=request.GetResponse()asHttpWebResponse;  responseresponseStream=response.GetResponseStream();  reader=newSystem.IO.StreamReader(responseStream,Encoding.GetEncoding("GB2312"));  srcString=reader.ReadToEnd();   ///////////////////////////////////////////////////  //3.打开Default.aspx页面  ///////////////////////////////////////////////////  //设置打开页面的参数  URI="http://localhost:1165/WebTest/Default.aspx";  request=WebRequest.Create(URI)asHttpWebRequest;  request.Method="GET";  request.KeepAlive=false;  request.CookieContainer=cookieContainer;   //接收返回的页面  response=request.GetResponse()asHttpWebResponse;  responseresponseStream=response.GetResponseStream();  reader=newSystem.IO.StreamReader(responseStream,Encoding.UTF8);  srcString=reader.ReadToEnd();   ///////////////////////////////////////////////////  //4.分析返回的页面  ///////////////////////////////////////////////////  //  }  catch(WebExceptionwe)  {  stringmsg=we.Message;  }


说明:
1) 之所以能够保持 Session 和 Cookie 是因为使用了 Cookie 容器(CookieContainer),见红色的代码部分。
2) POST ASP.NET页面时,需要把 VeiwState 和 EventValidation 数据也一同 POST 过去。

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注创新互联行业资讯频道,感谢您对创新互联的支持。


当前文章:ASP.NET中Session和Cookie如何使用
文章路径:http://scyanting.com/article/ijpdpi.html