当前位置:编程学习 > C#/ASP.NET >>

请教webrequest 问题,问题明细见内容

大家好:
   请教个使用webrequest的问题。
   问题背景:
       
       有两个网站需要互相共用cookie,一个是asp做的(例如www.site.asp),另外一个是aspx(例如www.site.aspx)。用户在www.site.asp上登录后,用户信息保存在cookies("username"} 中。当用户访问www.site.aspx 时,需要检查用户是否已经登录到www.site.asp.
      实现原理:
       1.在www.site.asp上有个 checkuser.asp,代码如下:
       <%
     'checkuser.asp
    '检查cookie 
dim un
un = Request.Cookies("username")
dim unlen
unlen = len(un)

        Response.Write(un)
if unlen = 0 then
Response.AddHeader "loginstatus","notok"
else
Response.AddHeader "loginstatus","ok"
end if
     %>

      2.当用户访问www.site.aspx上的 "aa.aspx"时,在"aa.aspx"中用webrequest请求"checkuser.asp",从而获取到headers中的“loginstatus”的值。aa.aspx代码如下:
         <%
    //aa.aspx 代码,写在aspx页面中

     string url = "http://www.site.asp/checkuser.asp";
   
     WebRequest wrequest = System.Net.WebRequest.Create(url); 
     wrequest.Timeout = 30000;
     System.Net.HttpWebResponse wresponse = (System.Net.HttpWebResponse)wrequest.GetResponse();

     string rslt="";
     
     if ( wresponse.StatusCode == System.Net.HttpStatusCode.OK)
         rslt = wresponse.Headers["loginstatus"];
     
   
     wresponse.Close();
     Response.Write(rslt);
     

     Response.End();

    %>

    产生的问题: 
      当用户已经登录www.site.asp后,单独访问http://www.site.asp/checkuser.asp时,总是能正确访问到username的值。当用户从www.site.asp转到 http://www.site.aspx/aa.aspx时,需要检查用户是否在www.site.asp中登录(检查方法看aa.aspx的代码),结果总是 "notok",问题就是为什么用webrequest请求"checkuser.asp"时,不能正确获取到cookie?
    (注:做过测试,当在同一个网站下,都用aspx来做时,也是同样的效果)
   谢谢!
       --------------------编程问答-------------------- webrequest请求页面时,所用的cookies必须手动指定!也就是说,你的代码实际上没有发送任何的cookies。 --------------------编程问答-------------------- to zzultc:
   那么我这种方法检查用户是否登录是不可行的?
    如果我知道cookies的,就没必要再指定cookies去请求checkuser.asp了。
    您有什么好的建议? --------------------编程问答-------------------- 这个原因主要是因为cookies不能垮域使用,只有在同一域下时,浏览器才会发送cookies。
你上面的那个例子aa.aspx中,对http://www.site.asp/checkuser.asp的访问是在服务器端进行的,这时候的cookies你只能在服务器运行webrequest的那段代码时才能得到。
而对用户而言,第一次访问www.site.asp,得到www.site.asp发给的cookies,但是访问http://www.site.aspx/时,客户根本不把www.site.asp得到的cookies发给www.site.aspx,所以,你的aa.aspx也就接收不到cookies。
当你把这两者放在同一域下,客户就会发送cookies,而不管你是asp或者aspx,甚至是jsp照样能得到cookies。 --------------------编程问答-------------------- 你出现的问题主要原因:
1、从一个域向另外一个域访问时,cookies和Headers是不发送的。
2、aa.aspx请求checkuser.asp时,必须手动添加cookies的值(如果是在同一个网站下,这个cookies的值,你可以从客户那里得到,在访问checkuser.asp之前,必须添加到 WebRequest头里边去)。

所以说,只要你把这两个页面放在同一个域中,也是可以判断的。
但是不同的域,根本无法判断。
补充:.NET技术 ,  ASP.NET
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,