[mod_python] Cookie patch

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


More information about the Mod_python mailing list