#1 - You're Welcome for my response  :)

#2 - I don't think this is a bug per se because cookies use the 
semi-colons to separate values on the same line in the header... and a 
semi-colon is a valid value for a input element submission <input 
type="text" value="Hi;Mom;" /> doesn't technically need to by encoded 
though the web browser would anyway; I don't think it would look different.

Your fix makes total sense to me. You have a serialized PHP array (with 
semicolons) in your cookie; cookies use semi-colons to separate data 
bits on one contiguous text line. You are converting the semi-colons to 
the codes the uridecode function(s) happily understand and return to 
semi-colon's for you... I think you did a great job solving this if you 
ask me!

--Jason
(I'm committing this "gotcha" to memory in case I ever do the same thing 
in a cookie!)





On 7/1/2010 9:39 AM, Leonardo M. Ramé wrote:
> --- On Thu, 7/1/10, Jason P Sage<[email protected]>  wrote:
>
>> From: Jason P Sage<[email protected]>
>> Subject: Re: [Synalist] HttpGetText from Localhost
>> To: [email protected]
>> Date: Thursday, July 1, 2010, 7:29 AM
>>    Hello Leonardo. I have to ask
>> the simple question: Does the URL you
>> are specifying work with a browser? I mean 404 error sounds
>> like a
>> server response.
> Jason, thanks for answering. Let me tell you a little bit more about the 
> problem, now I'm in an advanced stage since the last time, so the problem as 
> changed.
>
> First of all, the server is Linux on i386, and the PHP app is just a little 
> script that encapsulates some logic that allows the know some data about the 
> logged-in user, profile, etc. When I say logged-in, I mean, logged in to an 
> SMF forum.
>
> If I log in to the SMF forum, a Cookie is created, then when I call the 
> little PHP app, it uses some high level functions to access user data. I 
> debugged this with FireBug, and found the browser sends the Cookie back and 
> forth to the server, that's why the php script allways work.
>
> On the other hand, my app is a CGI created with fcl-web, that needs to call 
> this php script passing the Cookie to let the php script to know how to 
> handle user data. What I found, is the cookie data has many #10 chars, and 
> must be EncodeURL before sending to the server, the problem now is that I 
> think Synapse's EncodeURL function isn't working as expected.
>
> The encoded Cookie is this:
>
> SMFCookie11=a%3A4%3A%7Bi%3A0%3Bs%3A4%3A%225179%22%3Bi%3A1%3Bs%3A40%3A%22b0102aa33e0d25c7f46ded1dc9d61b82e9d30175%22%3Bi%3A2%3Bi%3A1277993716%3Bi%3A3%3Bi%3A0%3B%7D<---
>  Let's call this (1)
>
> If I decode it with this tool, http://meyerweb.com/eric/tools/dencoder/ , I 
> get this:
>
> SMFCookie11=a:4:{i:0;s:4:"5179";i:1;s:40:"b0102aa33e0d25c7f46ded1dc9d61b82e9d30175";i:2;i:1277993716;i:3;i:0;}
>
> In my CGI I receive the Cookie in its decoded form, with many #10 chars that 
> I have to remove to format the Cookie the same way as I need, then Encode it 
> to send to the server, the problem is that I get this:
>
> SMFCookie11=a:4:%7Bi:0;s:4:%225179%22;i:1;s:40:%22b0102aa33e0d25c7f46ded1dc9d61b82e9d30175%22;i:2;i:1277993716;i:3;i:0;%7D
>
> Instead of the one in (1). If you look a little closer, Synapse's encoder is 
> skipping ":" and ";". To get the deserved results, I had to replace ":" by 
> "%3A" and ";" by "%3B". Is this a bug???
>
> Problem solved!.
>
> This is my code:
> ----------------
>
> function TWebModule1.GetLoginInfo: string;
> var
>    lResponse: TStringList;
>    lHttpSend: THttpSend;
>    lSmfCookie: string;
> begin
>    Result := '';
>    lResponse := TStringList.Create;
>    lHttpSend := THttpSend.Create;
>    try
>      (* Extract the cookie *)
>      lSmfCookie := Copy(
>        Request.CookieFields.Text,
>        Pos('SMFCookie11=', Request.CookieFields.Text),
>        Length(Request.CookieFields.Text));
>      (* Remove the SMFCookie11= part *)
>      lSmfCookie := Copy(lSmfCookie, Pos('=', lSmfCookie) + 1, Pos('}', 
> lSmfCookie) - 1);
>      (* Remove the #10s *)
>      lSmfCookie := StringReplace(lSmfCookie, #10, ';', [rfReplaceAll]);
>      lSmfCookie := StringReplace(lSmfCookie, '};', '}', []);
>      (* Encode *)
>      lSmfCookie := EncodeUrl(lSmfCookie);
>      (* EncodeURL function left ":" and ";", I have to encode manually *)
>      lSmfCookie := StringReplace(lSmfCookie, ':', '%3A', [rfReplaceAll]);
>      lSmfCookie := StringReplace(lSmfCookie, ';', '%3B', [rfReplaceAll]);
>      (* Add SMFCookie11= again *)
>      lHttpSend.Cookies.Add('SMFCookie11=' + lSmfCookie);
>      (* Send request to the browser *)
>      lHttpSend.HttpMethod('GET', 'http://localhost/getuser.php');
>      lResponse.LoadFromStream(lHttpSend.Document);
>      (* Get the results *)
>      Result := lResponse.Text;
>    finally
>      lResponse.Free;
>      lHttpSend.Free;
>    end;
> end;
>
> Leonardo M. Ramé
> http://leonardorame.blogspot.com
>
>
>
>
> ------------------------------------------------------------------------------
> This SF.net email is sponsored by Sprint
> What will you do first with EVO, the first 4G phone?
> Visit sprint.com/first -- http://p.sf.net/sfu/sprint-com-first
> _______________________________________________
> synalist-public mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/synalist-public


------------------------------------------------------------------------------
This SF.net email is sponsored by Sprint
What will you do first with EVO, the first 4G phone?
Visit sprint.com/first -- http://p.sf.net/sfu/sprint-com-first
_______________________________________________
synalist-public mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/synalist-public

Reply via email to