Preload — specify macro to be executed at the very beginning of every request
This is just like Autoload
as it executes an Interchange macro
but runs at the earliest possible stage of request processing, which
allows tweaking the session, path, robot status, cookie handling,
authorization, etc.
Example: Simple Preload example
This example shows how to not create a session for any but explicitly listed URL prefixes.
Put the following in interchange.cfg
:
GlobalSub <<EOR sub skip_session { $CGI::values{mv_tmp_session} = 1 if $CGI::path_info =~ m{\A/(?:aboutus|contact|info)}; return; } EOR
Put the following in catalog.cfg
:
Preload skip_session
For diagnostic purposes, you can put a footer in your bottom page template to show the current session ID:
session ID=[data session id]
Restart Interchange, then visit various pages. Whenever you visit a page whose path starts with "aboutus", "contact", or "info", no session will be assigned, which you can verify by looking at your diagnostic output at the bottom of the page. This can be useful if you require cookies for session access, and don't want to incur the overhead of session access on pages that don't need it.
Interchange 5.9.0:
Source: lib/Vend/Config.pm
Line 3802 (context shows lines 3802-3836)
sub parse_routine_array { my($item,$settings) = @_; return '' unless $settings; my $c; if(defined $C) { $c = $C->{$item}; } else { no strict 'refs'; $c = ${"Global::$item"}; } my @mac; if($settings =~ /^[-\s\w,]+$/) { @mac = grep /\S/, split /[\s,]+/, $settings; } else { push @mac, $settings; } if(ref($c) eq 'ARRAY') { push @$c, @mac; } elsif($c) { $c = [$c, @mac]; } else { $c = scalar(@mac) > 1 ? [ @mac ] : $mac[0]; } return $c; }