#!/usr/bin/perl use CGI; use DBI; use Digest::MD5 qw(md5 md5_hex md5_base64); $DB = "dbi:mysql:demoOne:silo.cs.indiana.edu:port=16248"; $username = "dgerman"; $password = "sp00n"; $DB_TABLE = "aaron"; $SECRET = "something secret"; $EXPIRE = 30 * 24 * 3600; # one month $MAX_TRIES = 10; $ID_LENGTH = 8; $q = new CGI; # Open the database -------------------------------------------------------- $DBH = DBI->connect($DB, $username, $password, {PrintError => 0}) || die "Couldn't open database: ", $DBI::errstr; # get the current session ID, or make one ---------------------------------- my ($session_id, $note) = &get_session_id(); # retrieve the state ------------------------------------------------------- my $state = &get_state($session_id) unless $q->param('clear'); $message = $state->{'message'}; $n1 = $state->{'n1'}; $n2 = $state->{'n2'}; $n3 = $state->{'n3'}; $user = $state->{'user'}; $comp = $state->{'comp'}; $turn = $state->{'turn'}; $one = $q->param('one'); $two = $q->param('two'); $three = $q->param('three'); $turn = ""; if ($one ne "on") { $n1 = int(rand(100)) - 50; } if ($two ne "on") { $n2 = int(rand(100)) - 50; } if ($three ne "on") { $n3 = int(rand(100)) - 50; } $options = ""; $c1 = int(rand(100)) - 50; $c2 = int(rand(100)) - 50; $c3 = int(rand(100)) - 50; $message = "Computer draws ($c1, $c2, $c3)."; $val = 0; if ($c1 > $n1) { $val += 1; } elsif ($c1 < $n1) { $val -= 1; } if ($c2 > $n2) { $val += 1; } elsif ($c2 < $n2) { $val -= 1; } if ($c3 > $n3) { $val += 1; } elsif ($c3 < $n3) { $val -= 1; } if ($val > 0) { $message .= " Computer wins."; $comp += 1; } elsif ($val < 0) { $message .= " You win."; $user += 1; } else { $message .= " This is a tie. "; $user += 1; $comp += 1; } $message .= " Score now: $user - $comp. "; $state->{'message'} = $message; $state->{'n1'} = $n1; $state->{'n2'} = $n2; $state->{'n3'} = $n3; $state->{'user'} = $user; $state->{'comp'} = $comp; $state->{'turn'} = $turn; # save the modified state -------------------------------------------------- &save_state($state, $session_id); # start the page ----------------------------------------------------------- print $q->header, $q->start_html(-title => 'Database Sessions with URL Rewriting', -bgcolor => 'white'); print qq{
}; print $q->end_html; $DBH->disconnect; # save the state in the database ------------------------------save_state--- sub save_state { my ($state, $id) = @_; my $sth = $DBH->prepare(<