Skip to content

Instantly share code, notes, and snippets.

@mormegil-cz
Created November 15, 2012 19:39
Show Gist options
  • Save mormegil-cz/4080746 to your computer and use it in GitHub Desktop.
Save mormegil-cz/4080746 to your computer and use it in GitHub Desktop.
Multi-threaded cookie management
private readonly Dictionary<string, Cookie> globalCookies = new Dictionary<string, Cookie>();
public void DoRequest(Uri uri)
{
var localCookies = new CookieContainer();
lock(globalCookies)
{
foreach(var cookie in globalCookies)
{
localCookies.Add(cookie.Value);
}
}
var origCookies = new HashSet<string>(localCookies.GetCookies(uri).Cast<Cookie>().Select(c => c.Name));
ReallyDoWebRequest(uri, localCookies);
lock(globalCookies)
{
var currCookies = new HashSet<string>(localCookies.GetCookies(uri).Cast<Cookie>().Select(c => c.Name));
foreach(var origCookie in origCookies)
{
if (!currCookies.Contains(origCookie))
{
// smazaná cookie
globalCookies.Remove(origCookie);
}
}
foreach(var cookie in localCookies.GetCookies(uri).Cast<Cookie>())
{
// nová?
if (!origCookies.Contains(cookie.Name))
{
globalCookies.Add(cookie.Name, cookie);
}
// změněná?
else
{
globalCookies[cookie.Name] = cookie;
}
}
}
}
private void ReallyDoWebRequest(Uri uri, CookieContainer cookies)
{
// ...
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment