请教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