LoveCherry

技术无极限

博客园 首页 新随笔 联系 订阅 管理
  182 Posts :: 0 Stories :: 2496 Comments :: 553 Trackbacks
昨天有网友在msn问我如果有几个页面,给第一个页面post信息以后session设定一个值然后进入第二个页面,第二个页面调整了session后进入第三个页面,这样的情况怎么做,我写了一个例子,不知道是不是符合你的要求,如果不符合请留言。

static void Main(string[] args)
        {
            CookieContainer myCookieContainer
=new CookieContainer(); 
            Console.WriteLine(PostData(
"http://localhost/csdn/step1.asp","step1=step1",myCookieContainer));
            Console.WriteLine(PostData(
"http://localhost/csdn/step2.asp","",myCookieContainer));
            Console.WriteLine(PostData(
"http://localhost/csdn/step3.asp","",myCookieContainer));
        }

写一个方法封装一下这个post的操作,第一个参数是地址,第二个参数是post的信息,第三个参数是CookieContainer,request的时候使用这个CookieContainer,在response的时候把CookieContainer赋值,因为本来CookieContainer就是引用类型的,所以可以不加ref或者out操作符。

        public static string PostData(string url,string indata,CookieContainer myCookieContainer)
        {
            
string outdata=""
            HttpWebRequest myHttpWebRequest
=(HttpWebRequest)WebRequest.Create(url); 
            myHttpWebRequest.ContentType
="application/x-www-form-urlencoded"
            myHttpWebRequest.ContentLength
=indata.Length; 
            myHttpWebRequest.Method
="POST"
            myHttpWebRequest.CookieContainer
=myCookieContainer; 
            Stream myRequestStream
=myHttpWebRequest.GetRequestStream(); 
            StreamWriter myStreamWriter
=new StreamWriter(myRequestStream,Encoding.GetEncoding("gb2312"));                 
            myStreamWriter.Write(indata); 
            myStreamWriter.Close(); 
            myRequestStream.Close(); 
            HttpWebResponse myHttpWebResponse
=(HttpWebResponse)myHttpWebRequest.GetResponse(); 
            myHttpWebResponse.Cookies
=myCookieContainer.GetCookies(myHttpWebRequest.RequestUri); 
            Stream myResponseStream
=myHttpWebResponse.GetResponseStream(); 
            StreamReader myStreamReader
=new StreamReader(myResponseStream,Encoding.GetEncoding("gb2312")); 
            outdata
=myStreamReader.ReadToEnd(); 
            myStreamReader.Close(); 
            myResponseStream.Close();
            
return outdata;
        }    

三个asp页面如下:

step1.asp
<%
if request.ServerVariables("REQUEST_METHOD")="POST" then
if request.Form("step1")="step1" then 
session(
"step")="1"
response.Write("<script>alert('step1->ok');location.href='step2.asp';</script>")
else
response.Write(
"<script>alert('step1->not ok');</script>")
end if
end if
%>
<form method="post">
<input type="text" name="step1" value="step1">
<input type="submit" value="post">
</form>

step2.asp
<%
if session("step")="1" then
session(
"step")="2"
response.Write("<script>alert('step2->ok');location.href='step3.asp';</script>")
else
response.Write(
"<script>alert('step2->not ok');</script>")
end if
%>

step3.asp
<%
if session("step")="2" then 
response.Write(
"<script>alert('step3->ok');</script>")
else
response.Write(
"<script>alert('step3->not ok');</script>")
end if
%>
posted on 2005-06-18 17:19 lovecherry 阅读(2469) 评论(6)  编辑 收藏 所属分类: webform

Feedback

#1楼  2005-06-19 11:48 Ivan [未注册用户]
非常谢谢!但是我是这个意思:
有step1,step2,step3三个页面。
访问step1, 它在我电脑上写入了一个cookie, 上面有个表单,提交到step2, 到这一步,cookiecontainer里面就有值了。
提交到step2的时候,他会访问刚才的cookie里面的值,然后再返回一个cookie到本地电脑, 这时候step2上有一个form,提交到step3 --> 这里返回的cookie追加不到cookiescontainer里面去
提交到step3的时候,他会访问刚才的step1和step2留下的两个cookie取值,然后就完成操作了。
  回复  引用    

#2楼  2005-06-19 12:12 Ivan [未注册用户]
LoveCherry ;
上面我所说的问题解决了。谢谢 :)
  回复  引用    

#3楼 [楼主] 2005-06-19 17:01 lovecherry      
看来我误解你的意思了,解决了就好。
  回复  引用  查看    

#4楼  2005-10-11 00:21 修罗 [未注册用户]
如果人家有验证码。COOKIE加密就不行了吧。
如果人家用SESSION还是不行吧。
  回复  引用    

#5楼  2007-03-14 11:17 id51.cn [未注册用户]
含有提交中文时候不行 请求已被取消。 为何
  回复  引用    

#6楼  2008-04-25 19:01 WANERNET [未注册用户]
没语言

为撒我原封不动COPY代码也获取不到COOKIE

VS2005环境
  回复  引用