<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>

<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
</head>
<body bgcolor="#ffffff" text="#000000">
I'm running into a problem with duplicated cookies.  This is due to
misbehaving servers sending back duplicate Set-Cookie headers in the
same response, like this:<br>
<br>
 Set-Cookie: JSESSIONID=foo; Path=/; Secure<br>
 Set-Cookie: JSESSIONID=bar; Path=/; Secure<br>
<br>
Firefox deals with this by picked the last cookie value specified. 
There is no logic in drakma currently to handle that, and so my
cookie-jar is getting two JSESSION cookies, and further requests are
sending both cookies.  I do not control the servers returning me these
duplicate headers.<br>
<br>
This patch adds a unique-cookies function that iterates through cookie
objects, keeping only the last one.  This is then called in get-cookies
to ensure no duplicate cookie objects are propagated to the rest of the
system.  I've got my "make it work on a friday afternoon" solution in
the attached patch, but I'm not really happy with it long term, and
wanted some advice.  Problems I see:<br>
<ul>
  <li>I think the dolist/find combination is a recipe for performance
problems with many cookies</li>
  <li>It seems odd to build up a list of cookies, then rebuild it</li>
  <li>The most common case of no duplicate cookies has an extra bunch
of consing to rebuilding up the list<br>
  </li>
  <li>I think there should be a user choice of "ignore all but the last
cookie" vs "ignore all but the first cookie" vs "leave them all in
there"<br>
  </li>
</ul>
Some thoughts on how to proceed:<br>
<ol>
  <li>Add a exported *redundant-cookie-strategy* variable, with values
:keep-all, :keep-first, and :keep-last, defaulting to :keep-all (the
current behavior).</li>
  <li>remove the unique-cookies function and rewrite get-cookies to
implement the *redundant-cookie-strategy*, making one pass through
parsed-cookies.  </li>
  <li>leave get-cookies mostly as-is, but add some detection for
duplicates, and run unique-cookies only if it we need to<br>
  </li>
</ol>
Thanks,<br>
Ryan<br>
<br>
PS: I'm still kinda new to contributing on open source projects via
emailed patches, sorry if this is in a bad format.  I read
<a class="moz-txt-link-freetext" href="http://weitz.de/patches.html">http://weitz.de/patches.html</a> and created this patch from my working
copy using >diff -u ../drakma-1.1.0/cookies.lisp cookies.lisp <br>
</body>
</html>