2008-12-02 93 views
0

我正在编写一个应用程序,它需要打开浏览器窗口(可能会坚持IE)到使用表单身份验证的网站。诀窍是他们需要进行身份验证,以节省时间,因为我们需要进入的网站数量众多。 (最后我会在屏幕抓取他们和处理数据......但我仍然需要得到认证件工作,使他们能够通过在需要时点击真正的网站。)如何将Cookie传递到外部网络浏览器?

我已经得到了Forms Authentication工作,因为我可以使用HttpWebRequest来获取html并将其传递给浏览器。但是,我无法将它传送到客户端浏览器,以便它可以进入实际的网站。

我得到System.Net.Cookies的认证,我已经试过复制到System.Web.HttpCookies并添加这些到Response对象。如果我在页面上放置链接或使用Response.Redirect访问网站,则不起作用,就像用户未通过身份验证一样。

任何人有任何想法,我怎么会拉这一关?

下面是当前的代码,如果使这个更加清晰:

Dictionary<string, string> formValues = new Dictionary<string, string>(4); 
     formValues.Add("txbUserName", "USERNAME"); 
     formValues.Add("txbPassword", "PASSWORD"); 
     formValues.Add("SubmitB", "Log In"); 

     HttpWebRequest webRequest; 
     StreamReader responseReader; 
     string responseData; 

     //This authenticates an HttpWebRequest and returns it 
     webRequest = FormsAuthHttpWebRequest.Create("REQUESTURI", "LOGINURI", 
                formValues) as HttpWebRequest; 

     responseReader = new StreamReader(webRequest.GetResponse().GetResponseStream()); 

     responseData = responseReader.ReadToEnd(); 
     responseReader.Close(); 

     foreach (Cookie cookie in webRequest.CookieContainer.GetCookies(new Uri("SITEURI"))) 
     { 
      HttpCookie httpCookie = new HttpCookie(cookie.Name, cookie.Value) 
      { 
       Domain = cookie.Domain, 
       Expires = cookie.Expires, 
       Path = cookie.Path, 
       HttpOnly = cookie.HttpOnly, 
       Secure = cookie.Secure     
      }; 

      Response.Cookies.Add(httpCookie); 
     } 


     Response.Redirect("REQUESTURI"); 

回答

3

我不认为你将能够做到这一点。浏览器将忽略来自不属于与cookie关联的域的Web服务器的任何“Add-Cookie”头。这是Cookie的内置安全性的一部分 - 如果其他网站可以为另一个域读取或写入cookie,这将是灾难性的(从安全和隐私的角度来看)。

0

我认为该浏览器可以忽略,因为即将到来的Response.Redirect的响应报头的cookie。我们最近遇到了这个问题,并发现FF接受了cookies,但IE6没有。

我不知道我明白你该怎么做,虽然。您是否尝试将Cookie从站点A发送到实际用于站点B的浏览器?

+0

这不只是重定向,我也试图把一个链接页面上,得到了相同的结果。基本上,第一个版本将为多个网站打开浏览器,浏览器已经通过验证。 – CodeRedick 2008-12-02 23:59:59

相关问题