Well, as I said, you cannot call an object method if the object does not exist and its values aren't set, so simply try this instead :-)
my $cgi = new CGI;
# get the User
my $user = new GWAK::User();
# did it work ?
if (!$user) {
# if not go to login page
print $cgi->redirect("insert your login_url");
} else {
# or proceed
print $cgi->header();
...
}
caedes is right, since you once write a header you cannot write a second one, but in my experience a mistakenly written second header would then just occur as plain text, but that might differ depending on the default mime-type setting of the webserver.
Have a nice day
All decision is left to your taste