Dynamically generating tracking images

Josh josh at schulzone.org
Wed Oct 27 19:05:30 CEST 2010


You have to put the query string parameters into the esi path:

<esi:include src="/esi/tracker.pl?url=ENTER+PAGE+URL+HERE&title=ENTER+PAGE+TITLE+HERE"/>

I'm handling some tracking the exact same way, and it works fine.  The
esi request is a separate hit to the backend and doesn't have any of
the context from the request that caused it.

josh

On Wed, Oct 27, 2010 at 9:51 AM, Ruslan Sivak <russ at vshift.com> wrote:
> We are building a site which needs to be cached, but we need to have a
> tracking image that gets output for every page.  This image should contain
> certain (lets say all) parameters of the query string.
>
> I'm thinking of implementing this using ESI.  I currently have the
> following:
>
> test.php
>  <esi:include src="/esi/tracker.pl"/>
>
> /esi/tracker.pl
> #!/usr/bin/perl
> use CGI::Cookie ();
> use Apache2::RequestRec ();
> use APR::Table ();
> my $cookie = CGI::Cookie->new(-name  => 'mod_perl',
>                                     -value => 'awesome');
> print "Set-Cookie: $cookie\n";
> print "Content-type: text/html\n\n";
> print <<ENDHTML;
> $ENV{'QUERY_STRING'}
> <div>
> <img
> src="http://sometrackingsite/id/12345.gif?url=ENTER+PAGE+URL+HERE&title=ENTER+PAGE+TITLE+HERE"
> alt="" height="1" width="1" />
> </div>
> ENDHTML
>
> default.vcl
> ...
> sub vcl_fetch {
>   set beresp.ttl=5d;
>    if (req.url ~"test.php") {
>         esi;  /* Do ESI processing */
>         set beresp.ttl = 24 h;
>     } elseif (req.url == "/esi/tracker.pl") {
>         set beresp.ttl = 1m;
>     }
>   if (beresp.http.set-cookie) {
>     set beresp.http.set-cookie = ";" beresp.http.set-cookie;
>     set beresp.http.set-cookie = regsuball(beresp.http.set-cookie, "; +",
> ";");
>     set beresp.http.set-cookie = regsuball(beresp.http.set-cookie,
> ";(MY_COOKIE)=", "; \1=");
>     set beresp.http.set-cookie = regsuball(beresp.http.set-cookie, ";[^
> ][^;]*", "");
>     set beresp.http.set-cookie = regsuball(beresp.http.set-cookie, "^[;
> ]+|[; ]+$", "");
>
>     if (beresp.http.set-cookie == "") {
>         remove beresp.http.set-cookie;
>     }
>     return (deliver);
>    }
> }
> ...
>
> Am I going about this the right way?  Perl doesn't seem to see the query
> string or be able to set any cookies.
>
> Any help would be appreciated.
>
> Russ
>
> _______________________________________________
> varnish-misc mailing list
> varnish-misc at varnish-cache.org
> http://lists.varnish-cache.org/mailman/listinfo/varnish-misc
>



-- 
josh
@schulz
http://schulzone.org




More information about the varnish-misc mailing list