+sub ParseSearchHistorySession {
+ my $cgi = shift;
+ my $sessionID = $cgi->cookie('CGISESSID');
+ return () unless $sessionID;
+ my $session = get_session($sessionID);
+ return () unless $session and $session->param('search_history');
+ my $obj = eval { decode_json(uri_unescape($session->param('search_history'))) };
+ return () unless defined $obj;
+ return () unless ref $obj eq 'ARRAY';
+ return @{ $obj };
+}
+
+sub SetSearchHistorySession {
+ my ($cgi, $search_history) = @_;
+ my $sessionID = $cgi->cookie('CGISESSID');
+ return () unless $sessionID;
+ my $session = get_session($sessionID);
+ return () unless $session;
+ $session->param('search_history', uri_escape(encode_json($search_history)));
+}