问题描述
大家好:请教个使用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'检查cookiedimunun=Request.Cookies("username")dimunlenunlen=len(un)Response.Write(un)ifunlen=0thenResponse.AddHeader"loginstatus","notok"elseResponse.AddHeader"loginstatus","ok"endif%>2.当用户访问www.site.aspx上的"aa.aspx"时,在"aa.aspx"中用webrequest请求"checkuser.asp",从而获取到headers中的“loginstatus”的值。aa.aspx代码如下:<%//aa.aspx代码,写在aspx页面中stringurl="http://www.site.asp/checkuser.asp";WebRequestwrequest=System.Net.WebRequest.Create(url);wrequest.Timeout=30000;System.Net.HttpWebResponsewresponse=(System.Net.HttpWebResponse)wrequest.GetResponse();stringrslt="";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。
解决方案三:
tozzultc:那么我这种方法检查用户是否登录是不可行的?如果我知道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头里边去)。所以说,只要你把这两个页面放在同一个域中,也是可以判断的。但是不同的域,根本无法判断。