diff options
Diffstat (limited to 'modules/user/user.module')
-rw-r--r-- | modules/user/user.module | 35 |
1 files changed, 12 insertions, 23 deletions
diff --git a/modules/user/user.module b/modules/user/user.module index 2759ff4d7..bb13b1e62 100644 --- a/modules/user/user.module +++ b/modules/user/user.module @@ -37,8 +37,13 @@ function sess_read($key) { } function sess_write($key, $value) { + global $user; + + db_query("UPDATE {sessions} SET uid = %d, hostname = '%s', session = '%s', timestamp = %d WHERE sid = '$key'", $user->uid, $_SERVER["REMOTE_ADDR"], $value, time()); - db_query("UPDATE {sessions} SET hostname = '%s', session = '%s', timestamp = %d WHERE sid = '$key'", $_SERVER["REMOTE_ADDR"], $value, time()); + if (!db_affected_rows()) { + db_query("INSERT INTO {sessions} (uid, sid, hostname, session, timestamp) values(%d, '%s', '%s', '%s', %d)", $user->uid, $key, $_SERVER["REMOTE_ADDR"], $value, time()); + } return ''; } @@ -142,7 +147,7 @@ function user_save($account, $array = array()) { } else { $array["timestamp"] = time(); - $array["uid"] = db_next_id("user_uid"); + $array["uid"] = db_next_id("users_uid"); foreach ($array as $key => $value) { if ($key == "pass") { @@ -587,7 +592,7 @@ function user_login($edit = array(), $msg = "") { ** Try to log in the user locally: */ - if (!$user) { + if (!$user->uid) { $name = $edit["name"]; $pass = $edit["pass"]; $user = user_load(array("name" => $name, "pass" => $pass, "status" => 1)); @@ -607,7 +612,7 @@ function user_login($edit = array(), $msg = "") { ** When possible, determine corrosponding external auth source. Invoke source, and login user if successful: */ - if (!$user && $server && $result = user_get_authmaps("$name@$server")) { + if (!$user->uid && $server && $result = user_get_authmaps("$name@$server")) { if (module_invoke(key($result), "auth", $name, $pass, $server)) { $user = user_external_load("$name@$server"); watchdog("user", "external load: $name@$server, module: ". key($result)); @@ -621,7 +626,7 @@ function user_login($edit = array(), $msg = "") { ** Try each external authentication source in series. Register user if successful. */ - else if (!$user && $server) { + else if (!$user->uid && $server) { foreach (module_list() as $module) { if (module_hook($module, "auth")) { if (module_invoke($module, "auth", $name, $pass, $server)) { @@ -638,24 +643,8 @@ function user_login($edit = array(), $msg = "") { if ($user->uid) { watchdog("user", "session opened for '$user->name'"); - /* - ** Write session ID to database: - ** (TODO: Currently we only save the session if a user is logged in. - ** we should also add support for anonymous user sessions.) - */ - - if ($user->uid) { - // update the user's session if it already exists - db_query("UPDATE {sessions} SET timestamp = '%d' WHERE sid = '%s'", time(), session_id()); - - // if no changes, this is a new session to be added - if (!db_affected_rows()) { - db_query("INSERT INTO {sessions} (uid, sid, hostname, timestamp) values(%d, '%s', '%s', %d)", $user->uid, session_id(), $_SERVER["REMOTE_ADDR"], time()); - } - - // also update the user table timestamp noting user has logged in - db_query("UPDATE {users} SET timestamp = '%d' WHERE uid = '%s'", time(), $user->uid); - } + // update the user table timestamp noting user has logged in + db_query("UPDATE {users} SET timestamp = '%d' WHERE uid = '%s'", time(), $user->uid); /* ** If the user wants to be remembered, set the proper cookie such |