如何将Cookie传递到外部网络浏览器?
问题描述:
我正在编写一个应用程序,它需要打开浏览器窗口(可能会坚持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");
答
我不认为你将能够做到这一点。浏览器将忽略来自不属于与cookie关联的域的Web服务器的任何“Add-Cookie”头。这是Cookie的内置安全性的一部分 - 如果其他网站可以为另一个域读取或写入cookie,这将是灾难性的(从安全和隐私的角度来看)。
答
我认为该浏览器可以忽略,因为即将到来的Response.Redirect的响应报头的cookie。我们最近遇到了这个问题,并发现FF接受了cookies,但IE6没有。
我不知道我明白你该怎么做,虽然。您是否尝试将Cookie从站点A发送到实际用于站点B的浏览器?
这不只是重定向,我也试图把一个链接页面上,得到了相同的结果。基本上,第一个版本将为多个网站打开浏览器,浏览器已经通过验证。 – CodeRedick 2008-12-02 23:59:59