并非所有Cookie都使用cookiecontainer和webclient / httpwebrequest保存

时间:2011-01-19 10:26:55

标签: httpwebrequest webclient httpwebresponse session-cookies cookiecontainer

我正在尝试使用CookieAwareClient登录网站(代码在这里:C# WebClient Log onto Website)。当我使用我的网络浏览器登录网站时,我得到大约10个cookie。如果我禁用JavaScript并尝试登录,我会得到5(activeTab,id,mcim,PHPSESSID,用户名)。但是当我尝试使用CookieAwareClient登录时,唯一保存的cookie是PHPSESSID。

其他Cookie未被保存的原因是什么?我知道WebClient不会执行JavaScript,但是在禁用JavaScript时生成的其他3个cookie也不会被保留。

1 个答案:

答案 0 :(得分:2)

首先,一个显而易见的问题是:在您关闭浏览器中的脚本并尝试登录之前,您是否先清除了Cookie?如果没有,请清除cookie并再试一次。

假设您首先清除了cookie并且在无脚本登录后仍然获得了5个新cookie,那么通过查看缺少的cookie名称,我猜您的CookieAwareClient实际上并未成功登录用户。如果登录失败,我会期望缺少“用户名”cookie。当您查看登录请求返回的HTML时,它看起来像是成功登录吗?或者它是否会返回某种错误?

如果返回的HTML是成功登录的话,那么下一个可能的罪魁祸首就是浏览器正在执行但您的代码不执行的其他请求。例如,登录页面可能有一个META REFRESH,它重定向到另一个页面(设置一个cookie)。或者登录页面可能包含IFRAMEIMGSCRIPT等,而后者又会设置Cookie。要诊断这一点,请使用Fiddler,Firebug或其他类似工具来查看浏览器在登录过程中执行的特定HTTP请求。确保登录页面的POST正在进行所有cookie设置,如果没有,那么在初次登录后,您需要向代码添加其他请求。

如果事实证明只有一个HTTP请求设置cookie,则问题可能是您的代码正在向服务器发送(或不发送)的HTTP头或POST数据。浏览器可能会发送不同的标头或POST数据。诊断这一点还需要Firebug,Fiddler或类似工具来比较浏览器发送的HTTP标头和POST数据与您的代码发送的数据。

如果这些建议都不起作用,请发表评论,我们可以进行迭代。