QWizard::Storage::CGICookie - Stores data in web cookies. Requires javascript.


QWizard documentation Contained in the QWizard distribution.

Index


Code Index:

NAME

Top

QWizard::Storage::CGICookie - Stores data in web cookies. Requires javascript.

SYNOPSIS

Top

  my $st = new QWizard::Storage::CGICookie();
  $st->set('var', 'value');
  $st->get('var');

DESCRIPTION

Top

Stores data passed to it inside of web cookies. It requires javascript so that the cookies can be set from anywhere including after the HTTP headers have already been sent.

AUTHOR

Top

Wes Hardaker, hardaker@users.sourceforge.net

SEE ALSO

Top

perl(1)

Net-Policy: http://net-policy.sourceforge.net/


QWizard documentation Contained in the QWizard distribution.

package QWizard::Storage::CGICookie;

use strict;
use QWizard::Storage::Base;
our @ISA = qw(QWizard::Storage::Base);

our %cached_cookies = ();

our $VERSION = '3.15';
use CGI qw(escapeHTML);

sub new {
    my $class = shift;
    my $qw = shift;
    bless {wiz => $qw}, $class;
}

sub get {
    my ($self, $it) = @_;
    return $cached_cookies{$it} if (exists($cached_cookies{$it}));
    # XXX: optimize this
    my %cookies = fetch CGI::Cookie;
    return if (!exists($cookies{$it}));
    return $cookies{$it}->value;
}

sub get_all {
    my %cookies = fetch CGI::Cookie;
    return \%cookies;
}

sub set {
    my ($self, $it, $val) = @_;
    # security problems with passed in values.  escape them.
    my $str = "\n<script> document.cookie = \"" . escapeHTML($it) . "=" .
      escapeHTML($val) .
	"; path=/; expires=Mon, 16-Sep-2013 22:00:00 GMT\"</script>";
    $cached_cookies{$it} = $val;
    if ($self->{'started'}) {
	if ($#{$self->{'immediate_out'}}) {
	    print @{$self->{'immediate_out'}};
	    delete $self->{'immediate_out'};
	}
	print $str;
    } else {
	push @{$self->{'immediate_out'}}, $str;
    }
}

sub reset {
    # XXX: reset real cookies
    %cached_cookies = ();
}

1;