[FASTCGI] Cookie processing in Fast CGI
Martin Chapman
chapmanm at pixia.com
Thu Dec 10 15:19:11 EST 2009
Check out:
Http 1.0 master -
http://www.w3.org/Protocols/HTTP/1.0/draft-ietf-http-spec.html
Http 1.1 master - http://www.w3.org/Protocols/rfc2616/rfc2616.html
Martin
-----Original Message-----
From: Tom Bowden [mailto:charles_thomas at mac.com]
Sent: Thursday, December 10, 2009 1:17 PM
To: Rob Lemley
Cc: Martin Chapman; 'FastCGI Developers'
Subject: Re: [FASTCGI] Cookie processing in Fast CGI
The two rfc's you mention below are for Set-Cookie and Set-Cookie2.
I presume the Set-Cookie2 is for sending multiple cookies in one
header? Is that widely accepted?
Also -- do you know which RFC includes the Content-Disposition spec?
On Dec 9, 2009, at 6:24 PM, Rob Lemley wrote:
> I'd recommend having rfc2109 and rfc2965 handy.
>
> Also note that the Content-Disposition header is very similar to the
> Cookie header, ie would be common code.
>
> Rob
>
>
> Tom Bowden wrote:
>> will post with pleasure. Thanks!
>>
>> Tom
>>
>> On Dec 9, 2009, at 3:02 PM, Martin Chapman wrote:
>>
>>> Tom,
>>>
>>> It's a little ugly because it's COM and if you convert it to
>>> FastCGI it
>>> would be cool if you posted it back for the rest of us if you
>>> can. The
>>> entire COM implementation is attached.
>>>
>>> General Gist:
>>>
>>> 1. Get the cookie from the env vars. Should be called HTTP_COOKIE.
>>>
>>> 2. Use a method like the one below to parse the cookie value.
>>>
>>> STDMETHODIMP CCookie::ParseValue(BSTR sCookie)
>>> {
>>> AFX_MANAGE_STATE(AfxGetStaticModuleState());
>>>
>>> _bstr_t bstrCookie(sCookie);
>>> if (bstrCookie.length() == 0)
>>> return E_INVALIDARG;
>>>
>>> CString strCookie = (TCHAR*) bstrCookie;
>>> LPCSTR pEnd = strCookie;
>>> LPCSTR pStart = strCookie;
>>> CString name, value;
>>>
>>> while (*pEnd != '\0')
>>> {
>>> while (*pEnd && *pEnd != '=' && *pEnd != '&')
>>> pEnd++;
>>>
>>> if (*pEnd == '\0' || *pEnd == '&')
>>> {
>>> if (pEnd > pStart)
>>> {
>>> CopyToCString(value, pStart, pEnd);
>>> }
>>> put_Value(_bstr_t(value.GetBuffer()));
>>> if (*pEnd == '&')
>>> {
>>> pEnd++;
>>> pStart = pEnd;
>>> continue;
>>> }
>>> return S_OK;
>>> }
>>> else if (*pEnd == '=' )
>>> {
>>> if (pEnd > pStart)
>>> {
>>> CopyToCString(name, pStart, pEnd);
>>> }
>>> else
>>> {
>>> pEnd++;
>>> pStart = pEnd;
>>> break;
>>> }
>>>
>>> pEnd++;
>>> pStart = pEnd;
>>> while (*pEnd && *pEnd != '&' && *pEnd != '=')
>>> pEnd++;
>>> if (pEnd > pStart)
>>> CopyToCString(value, pStart, pEnd);
>>>
>>> AddValue(_bstr_t(name.GetBuffer()),
>>> _bstr_t(value.GetBuffer()));
>>> if (*pEnd != '\0')
>>> pEnd++;
>>>
>>> pStart = pEnd;
>>> }
>>> }
>>>
>>> return S_OK;
>>> }
>>>
>>> 3. The following func parses a single cookie value and is used in
>>> the
>>> func
>>> above.
>>>
>>> STDMETHODIMP CCookie::ParseValue(BSTR sCookie)
>>> {
>>> AFX_MANAGE_STATE(AfxGetStaticModuleState());
>>>
>>> _bstr_t bstrCookie(sCookie);
>>> if (bstrCookie.length() == 0)
>>> return E_INVALIDARG;
>>>
>>> CString strCookie = (TCHAR*) bstrCookie;
>>> LPCSTR pEnd = strCookie;
>>> LPCSTR pStart = strCookie;
>>> CString name, value;
>>>
>>> while (*pEnd != '\0')
>>> {
>>> while (*pEnd && *pEnd != '=' && *pEnd != '&')
>>> pEnd++;
>>>
>>> if (*pEnd == '\0' || *pEnd == '&')
>>> {
>>> if (pEnd > pStart)
>>> {
>>> CopyToCString(value, pStart, pEnd);
>>> }
>>> put_Value(_bstr_t(value.GetBuffer()));
>>> if (*pEnd == '&')
>>> {
>>> pEnd++;
>>> pStart = pEnd;
>>> continue;
>>> }
>>> return S_OK;
>>> }
>>> else
>>> if (*pEnd == '=' )
>>> {
>>> if (pEnd > pStart)
>>> {
>>> CopyToCString(name, pStart, pEnd);
>>> }
>>> else
>>> {
>>> pEnd++;
>>> pStart = pEnd;
>>> break;
>>> }
>>>
>>> pEnd++;
>>> pStart = pEnd;
>>> while (*pEnd && *pEnd != '&' && *pEnd != '=')
>>> pEnd++;
>>> if (pEnd > pStart)
>>> CopyToCString(value, pStart, pEnd);
>>>
>>> AddValue(_bstr_t(name.GetBuffer()),
>>> _bstr_t(value.GetBuffer()));
>>> if (*pEnd != '\0')
>>> pEnd++;
>>>
>>> pStart = pEnd;
>>> }
>>> }
>>>
>>> return S_OK;
>>> }
>>>
>>>
>>> -----Original Message-----
>>> From: fastcgi-developers-bounces
>>> +chapmanm=pixia.com at mailman.fastcgi.com
>>> [mailto:fastcgi-developers-bounces
>>> +chapmanm=pixia.com at mailman.fastcgi.com]
>>>
>>> On Behalf Of Tom Bowden
>>> Sent: Wednesday, December 09, 2009 1:18 PM
>>> To: FastCGI Developers
>>> Subject: [FASTCGI] Cookie processing in Fast CGI
>>>
>>> Is there a thread somewhere that talks about parsing cookies -
>>> or, is
>>> this something that I have to treat like any other header parsing
>>> task.
>>>
>>> Tom
>>>
>>> _______________________________________________
>>> FastCGI-developers mailing list
>>> FastCGI-developers at mailman.fastcgi.com
>>> http://mailman.pins.net/mailman/listinfo.cgi/fastcgi-
>>> developers<CookieCollection.h><Cookie.cpp><Cookie.h><CookieCollectio
>>> n.cpp>
>>>
>>
>> _______________________________________________
>> FastCGI-developers mailing list
>> FastCGI-developers at mailman.fastcgi.com
>> http://mailman.pins.net/mailman/listinfo.cgi/fastcgi-developers
>>
>>
>
More information about the FastCGI-developers
mailing list