You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@httpd.apache.org by Ben Laurie <be...@gonzo.ben.algroup.co.uk> on 1996/05/07 22:04:19 UTC

Re: multiple Set-Cookies (was Re: require-client functionality)

David King wrote:
> 
> 
> On Tue, 7 May 1996, Ben Laurie wrote:
> [bunch of stuff removed]
> > > 
> > > Nonshowstopper bugs:
> > > 
> > > 6) Multiple cookies sent *to* clients by CGI scripts do not appear to work.
> > >    I will look further into this.
> > 
> > Is this a consequence of merging the headers (a vague bell is ringing here)?
> > 
> 
> I've looked at this a little at my site.  It is indeed due to the merging of
> headers.  According to the HTTP/1.1 spec which discusses cookies multiple
> Set-Cookie headers are allowed but that the headers may be merged into a 
> single line by some intermediary.  However Netscape 2.0x does not appear to 
> accept merged Set-Cookies.
> 
> What the CGI developers here who noticed the problem have done is place the
> Set-Cookie in META-EQUIV tags in their HTML as a stopgap measure.  
> 
> A simple but really ugly hack that I have done is create a new function
> table_append which just adds the (key, value) pair to the end of the table
> and only use this function when grabbing the CGI headers.  This means that
> a lookup of key on the CGI output will only return the first match of key
> which I felt was a reasonable tradeoff for the time being.
> 
> I have enclosed my patch below in case you want to incorporate it (although
> I can understand why you wouldn't).

I'd be considerably happier about the patch if it checked for the cookie header
and only did a table_append in that case.

Cheers,

Ben.

> 
> Later,
> -David
> ----
>  David King, Boston University Distributed Systems Programmer at large
>  dsmk@bu.edu
>  (617) 353-8250 
> 
> Simple but ugly patch (to 1.1b1):
> ---------------------------------
> ===================================================================
> RCS file: RCS/alloc.c,v
> retrieving revision 1.1
> diff -r1.1 alloc.c
> 588a589,604
> > /******
> >  * This simple append is designed for the scan_script_headers routine
> >  * and it enables multiple versions of the same header on output.  I
> >  * kept this data structure a table so that keyed lookups are still
> >  * possible (although you will only get the first key that matches).
> >  * -dsmk 4/26/96
> >  ***************/
> > void table_append (table *t, char *key, char *val)
> > {
> >     table_entry *elts = (table_entry *)t->elts;
> > 
> >     elts = (table_entry *)push_array(t);
> >     elts->key = pstrdup (t->pool, key);
> >     elts->val = pstrdup (t->pool, val);
> > }
> > 
> ===================================================================
> RCS file: RCS/alloc.h,v
> retrieving revision 1.1
> diff -r1.1 alloc.h
> 148a149
> > void table_append (table *, char *name, char *val);
> ===================================================================
> RCS file: RCS/util_script.c,v
> retrieving revision 1.1
> diff -r1.1 util_script.c
> 306c306
> < 	    table_merge (r->err_headers_out, w, l);
> ---
> > 	    table_append (r->err_headers_out, w, l);
> 
> 

-- 
Ben Laurie                  Phone: +44 (181) 994 6435
Freelance Consultant and    Fax:   +44 (181) 994 6472
Technical Director          Email: ben@algroup.co.uk
A.L. Digital Ltd,           URL: http://www.algroup.co.uk
London, England.