0

这就是我设置 cookie 数据并传递 Web 请求的方式。当我使用 fiddler 检查网站的响应时,我看到 cookie 没有数据,并且到期数据设置为 1900 年 1 月 1 日。任何帮助将不胜感激。如果以下代码中有不清楚的地方,或者您需要更多信息来回答我的问题,请告诉我。谢谢。

System.Net.Cookie userType = 
    new System.Net.Cookie("CUserType","subscriber", "/", "www.DOMAIN_NAME.com");
userType.Expires = DateTime.Now.AddYears(1);
System.Net.Cookie dUserType = 
    new System.Net.Cookie("dCUserType", "subscriber", "/", "www.DOMAIN_NAME.com");
dUserType.Expires = DateTime.Now.AddYears(1);

System.Net.CookieContainer cookieContainer = new System.Net.CookieContainer();
cookieContainer.Add(userType);    
cookieContainer.Add(dUserType);

HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(URL);

webRequest.Proxy = new WebProxy("127.0.0.1", 8888);   
webRequest.Referer = "http://DOMAIN_NAME/search/index.aspx?lid=3";  
webRequest.ContentType = "application/x-www-form-urlencoded";   
webRequest.Date = DateTime.Now;    
webRequest.CookieContainer = cookieContainer;

string result;

using (var stream = webRequest.GetResponse().GetResponseStream())
using (var reader = new StreamReader(stream, Encoding.UTF8))    
{
    result = reader.ReadToEnd();    
}
4

1 回答 1

0

设置 cookie 时,还需要设置域,因为 cookiewww.domain.comdomain.com.

为了使它们相同,您需要domain在 cookie 上设置 。首先在web.config

<authentication mode="Forms">
 <forms domain="yoururl.com" ... />
</authentication> 

其次,当您手动设置 cookie 时(没有 www.):

Response.Cookies[cookieName].Domain = "yoururl.com";

或者当你设置它(没有 subdomain www.):

System.Net.Cookie dUserType = 
    new System.Net.Cookie("dCUserType", "subscriber", "/", "DOMAIN_NAME.com");

类似的问题和答案:
使用相同登录数据库的多个应用程序相互注销
asp.net 表单身份验证在登录到另一个实例时注销
以另一个用户身份登录时丢失会话/cookie

于 2012-12-25T19:56:15.753 回答