我有一个简单的winform应用程序。在第一次运行时,将运行登录屏幕,以便用户可以登录网站。会话cookie如果成功则会保存:
Properties.Settings.Default["cookies"] = cookies;
Properties.Settings.Default.Save();
完成此操作后,登录表单将被隐藏并运行新的主表单。在此mainform中,将再次读取并保存cookiecontainer:
CookieContainer cookies = Properties.Settings.Default.cookies;
像魅力一样工作。会话cookie仍在那里,一切都很好。之后,使用如下的cookie对网站发出新请求:
private string htmlGet(string url)
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "GET";
request.ContentType = "text/html";
request.CookieContainer = cookies;
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream dataStream = response.GetResponseStream();
StreamReader reader = new StreamReader(dataStream);
string responseFromServer = reader.ReadToEnd();
reader.Close();
dataStream.Close();
response.Close();
return responseFromServer;
}
工作正常。请求已完成,并且在字符串中找到特定的用户相关数据。
然而,我重启程序会发生一些奇怪的事情。
在程序启动之前,运行此代码以通过查看cookie来检查首次运行:
if (Properties.Settings.Default.cookies == null)
{
Application.Run(new login());
}
else
{
Application.Run(new main());
}
事实上,在第一次运行后,Properties.Settings.Default.cookies
不是null
,因此主要表单由Program.cs
启动。
非常奇怪,这次Properties.Settings.Default.cookies
会返回一个CookieContainer对象... 没有Cookie 。
我不知道为什么,因为我的应用程序设置只保存在登录表单中,该表单仅在首次运行时打开。有没有人有任何使用cookiecontainers做这样奇怪的事情的经验?我是否必须检查代码中的某些内容?欢呼声。