Nicolas Lehuen
nicolas.lehuen at gmail.com
Thu Jan 13 15:27:54 EST 2005
On Thu, 13 Jan 2005 12:44:36 -0700, Craig Warren <craig.warren at encorp.com> wrote: > Not quite sure this is correct above, I have a hard time > with the spec though.. > > But the problem I see is depending on the order of the value name pairs you > can get different results. > > The first time though the loop will always put the l_key in the > all_cookies_attribute, then depending on the order, it will put the > attributes of the all_cookies_attribute on the next cookies > > [cwarren at lapbob mod_python]$ python cookie_test.py > TEST > -------------------------------------------------- > New Funtion > Cookie:test=1;bob=1;$Version=0;$Path=/ > Cookies > test=1 > bob=1; version=0; path=/ > > My function Old with my fix > Cookie:test=1;bob=1;$Version=0;$Path=/ > Cookies > test=1 > bob=1; version=0; path=/ > > -------------------------------------------------- > > TEST > -------------------------------------------------- > New Funtion > Cookie:$Version=0;$Path=/;test=1 > Cookies > test=1; version=0; path=/ > > My function Old with my fix > Cookie:$Version=0;$Path=/;test=1 > Cookies > $Version=0; version=0; path=/ > test=1 > > -------------------------------------------------- > > TEST > -------------------------------------------------- > New Funtion > Cookie:test=1;$Version=0;bob=1;$Path=/ > Cookies > test=1; version=0 > bob=1; path=/ > > My function Old with my fix > Cookie:test=1;$Version=0;bob=1;$Path=/ > Cookies > test=1; version=0 > bob=1; path=/ > > -------------------------------------------------- > > [cwarren at lapbob mod_python]$ > > > Maybe only set the "global" attributes to all cookies if it has a "$" in > front of it, so you would have to collect those the first time through the > loop then add them afterwards to each Cookie. But like I said I don't quite > understand the spec very well. [...] Well, the spec is pretty thin on the subject indeed, but what I understand is that the result MUST depend on the order in which the attributes are written. For example : Cookie: $Version=1;test=2;$Path=/ ==> a single Cookie with key=='test', value=='2' and attributes version=='1' and path=='/' Cookie: $Version=1;test1=2;$Path=/;test2=3;$Path=/foo ==> two Cookies : - one with key=='test1', value=='2', version=='1' and path=='/' - one with key=='test2', value=='3', version=='1' and path=='/foo' Cookie: test1=2;$Path=/;$Version=1;test2=3;$Path=/foo;$Version=2 ==> two Cookies : - one with key=='test1', value=='2', version=='1' and path=='/' - one with key=='test2', value=='3', version=='2' and path=='/foo' Cookie: $Version=2;$Path='/fubar';test1=2;test2=3;$Path=/foo;$Version=1;test3=4;$Path=/bar;$Version=4 ==> three Cookies : - one with key=='test1', value=='2', version=='2' and path=='/fubar' - one with key=='test2', value=='3', version=='1' and path=='/foo' - one with key=='test3', value=='4', version=='4' and path=='/bar' To sum up, from what I understand, attributes are written like cookies whose name start by a dollar sign, and they apply to the rightmost preceding cookie. Attributes that are at the beginning of the Cookie header are 'global' attributes, used to describe the cookie 'baking' mechanism, like the Version attributes does. Here I chose to put those attributes in each Cookie, since I don't see any better way to return the information to the API user (maybe in a Cookies collection ?). I wrote a few tests and I checked that the new function does follow this interpretation of the RFC. The problem is that I'm not 100% sure that it's meant to be interpreted this way... I'll check in other Cookies implementations (in Python or Java) to make sure. Regards, Nicolas
|