diff --git a/lib/WebGUI/Operation/Account.pm b/lib/WebGUI/Operation/Account.pm
index a8c85af62..0c03c2317 100644
--- a/lib/WebGUI/Operation/Account.pm
+++ b/lib/WebGUI/Operation/Account.pm
@@ -259,7 +259,7 @@ sub www_deactivateAccountConfirm {
my ($u);
if ($session{user}{userId} < 26) {
return WebGUI::Privilege::vitalComponent();
- } elsif (($session{user}{userId} != 1) and $session{setting}{selfDeactivation}) {
+ } elsif ($session{setting}{selfDeactivation}) {
$u = WebGUI::User->new($session{user}{userId});
$u->status("Selfdestructed");
WebGUI::Session::end($session{var}{sessionId});
@@ -302,7 +302,7 @@ sub www_displayAccount {
#-------------------------------------------------------------------
sub www_displayLogin {
my ($output, $f);
- if ($session{var}{sessionId}) {
+ if ($session{user}{userId} != 1) {
$output .= www_displayAccount();
} else {
$output .= '
'.WebGUI::International::get(66).'
';
@@ -431,7 +431,7 @@ sub www_login {
}
if ($success == 1) {
- WebGUI::Session::start($uid);
+ WebGUI::Session::convertVisitorToUser($session{var}{sessionId},$uid);
$u->karma($session{setting}{karmaPerLogin},"Login","Just for logging in.") if ($session{setting}{useKarma});
_logLogin($uid,"success");
return "";
@@ -450,7 +450,7 @@ sub www_logout {
#-------------------------------------------------------------------
sub www_recoverPassword {
my ($output, $f);
- if ($session{var}{sessionId}) {
+ if ($session{user}{userId} != 1) {
$output .= www_displayAccount();
} else {
$output .= ''.WebGUI::International::get(71).'
';
@@ -506,7 +506,7 @@ sub www_recoverPasswordFinish {
#-------------------------------------------------------------------
sub www_updateAccount {
my ($output, $error, $encryptedPassword, $passwordStatement, $u);
- if ($session{var}{sessionId}) {
+ if ($session{user}{userId} != 1) {
if ($session{form}{identifier1} ne "password") {
$error = _hasBadPassword($session{form}{identifier1},$session{form}{identifier2});
unless ($error) {
diff --git a/lib/WebGUI/Session.pm b/lib/WebGUI/Session.pm
index 64d54c13e..ce5822036 100644
--- a/lib/WebGUI/Session.pm
+++ b/lib/WebGUI/Session.pm
@@ -208,6 +208,13 @@ sub close {
$ENV{PATH_INFO} = "/"; #work around to fix a bug in mod_perl (win32)
}
+#-------------------------------------------------------------------
+sub convertVisitorToUser {
+ WebGUI::SQL->write("update userSession set userId=$_[1] where sessionId=".quote($_[0]));
+ $session{var}{userId} = $_[1];
+ refreshUserInfo($_[1]);
+}
+
#-------------------------------------------------------------------
sub end {
WebGUI::SQL->write("delete from userSession where sessionId='$_[0]'",$session{dbh});
@@ -319,7 +326,11 @@ sub open {
}
###----------------------------
### session variables
- _setupSessionVars($session{cookie}{wgSession},$session{setting}{sessionTimeout});
+ if ($session{cookie}{wgSession} eq "") {
+ start(1); #setting up a visitor session
+ } else {
+ _setupSessionVars($session{cookie}{wgSession},$session{setting}{sessionTimeout});
+ }
###----------------------------
### current user's account and profile information (from users and userProfileData tables)
_setupUserInfo($session{var}{userId});
@@ -403,8 +414,7 @@ sub start {
my ($sessionId);
$sessionId = _generateSessionId();
WebGUI::SQL->write("insert into userSession values ('$sessionId', ".
- (time()+$session{setting}{sessionTimeout}).", ".
- time().", 0, '$ENV{REMOTE_ADDR}', $_[0])",$session{dbh});
+ (time()+$session{setting}{sessionTimeout}).", ".time().", 0, '$ENV{REMOTE_ADDR}', $_[0])");
setCookie("wgSession",$sessionId);
refreshSessionVars($sessionId);
}