diff options
Diffstat (limited to 'httemplate/elements')
-rw-r--r-- | httemplate/elements/create_uri_query | 25 | ||||
-rw-r--r-- | httemplate/elements/handle_uri_query | 8 |
2 files changed, 33 insertions, 0 deletions
diff --git a/httemplate/elements/create_uri_query b/httemplate/elements/create_uri_query new file mode 100644 index 000000000..32d8e2f87 --- /dev/null +++ b/httemplate/elements/create_uri_query @@ -0,0 +1,25 @@ +<% $query %>\ +<%init> + +my $query = $cgi->query_string; + +if ( length($query) > 1920 ) { #stupid IE 2083 URL limit + + my $session = int(rand(4294967296)); #XXX + my $pref = new FS::access_user_pref({ + 'usernum' => $FS::CurrentUser::CurrentUser->usernum, + 'prefname' => "redirect$session", + 'prefvalue' => $query, + 'expiration' => time + 3600, #1h? 1m? + }); + my $pref_error = $pref->insert; + if ( $pref_error ) { + die "FATAL: couldn't even set redirect cookie: $pref_error". + " attempting to set redirect$session to $query\n"; + } + + $query = "redirect=$session"; + +} + +</%init> diff --git a/httemplate/elements/handle_uri_query b/httemplate/elements/handle_uri_query new file mode 100644 index 000000000..eb7ea1ae1 --- /dev/null +++ b/httemplate/elements/handle_uri_query @@ -0,0 +1,8 @@ +<%init> +if ( $cgi->param('redirect') ) { + my $session = $cgi->param('redirect'); + my $pref = $FS::CurrentUser::CurrentUser->option("redirect$session"); + die "unknown redirect session $session\n" unless length($pref); + $cgi = new CGI($pref); +} +</%init> |