? phpinfo.php ? remember_me.patch ? user.diff ? includes/conf.phpu Index: includes/session.inc =================================================================== RCS file: /cvs/drupal/drupal/includes/session.inc,v retrieving revision 1.6 diff -u -r1.6 session.inc --- includes/session.inc 17 Jan 2004 10:06:04 -0000 1.6 +++ includes/session.inc 26 Feb 2004 13:30:44 -0000 @@ -15,18 +15,29 @@ } function sess_read($key) { - global $user; - - $result = db_query_range("SELECT u.*, s.*, r.name AS role FROM {users} u INNER JOIN {sessions} s ON u.uid = s.uid LEFT JOIN {role} r ON u.rid = r.rid WHERE s.sid = '%s' AND u.status < 3", $key, 0, 1); - if (!db_num_rows($result)) { - $result = db_query("SELECT u.*, r.name AS role FROM {users} u INNER JOIN {role} r ON u.rid = r.rid WHERE u.uid = 0"); - db_query("INSERT INTO {sessions} (uid, sid, hostname, timestamp) values(%d, '%s', '%s', %d)", $user->uid, $key, $_SERVER["REMOTE_ADDR"], time()); + if ($_COOKIE['remember_me']) { + $sids[] = $_COOKIE['remember_me']; + } + $sids[] = $key; + + foreach ($sids as $sid) { + $result = db_query_range("SELECT u.*, s.*, r.name AS role FROM {users} u INNER JOIN {sessions} s ON u.uid = s.uid LEFT JOIN {role} r ON u.rid = r.rid WHERE s.sid = '%s' AND u.status < 3", $sid, 0, 1); + if (db_num_rows($result)) { + return sess_construct_user($result); + } } + + $result = db_query("SELECT u.*, r.name AS role FROM {users} u INNER JOIN {role} r ON u.rid = r.rid WHERE u.uid = 0"); + db_query("INSERT INTO {sessions} (uid, sid, hostname, timestamp) values(%d, '%s', '%s', %d)", $user->uid, $key, $_SERVER["REMOTE_ADDR"], time()); + return sess_construct_user($result); +} +function sess_construct_user($result) { + global $user; + $user = db_fetch_object($result); $user = drupal_unpack($user); - return !empty($user->session) ? $user->session : ''; } Index: modules/user.module =================================================================== RCS file: /cvs/drupal/drupal/modules/user.module,v retrieving revision 1.303 diff -u -r1.303 user.module --- modules/user.module 15 Feb 2004 20:09:46 -0000 1.303 +++ modules/user.module 26 Feb 2004 13:30:47 -0000 @@ -348,6 +348,14 @@ $output .= form_hidden("destination", $edit["destination"]); $output .= form_textfield(t("Username"), 'name', $edit['name'], 15, 64); $output .= form_password(t("Password"), 'pass', $pass, 15, 64); + + if (variable_get("user_remember", 0) == 0) { + $output .= form_checkbox(t("Remember me"), "remember_me"); + } + elseif (variable_get("user_remember", 1) == 1) { + $output .= form_hidden("remember_me", 1); + } + $output .= form_submit(t("Log in")); $output .= "\n"; @@ -603,7 +611,9 @@ */ $path = preg_replace("/.+\/\/[^\/]+(.*)/", "\$1/", $base_url); - setcookie(session_name(), session_id(), FALSE, $path); + if ($edit["remember_me"]) { + setcookie('remember_me', session_id(), time() + 3600 * 24 * 365, $path); + } /* ** Redirect the user to the page he logged on from. @@ -656,6 +666,7 @@ $output .= form_textfield(t("Username"), 'name', $edit['name'], 30, 64, t("Enter your %s username.", array("%s" => variable_get("site_name", "local")))); } $output .= form_password(t("Password"), 'pass', $pass, 30, 64, t("Enter the password that accompanies your username.")); + $output .= form_checkbox(t("Remember me"), "remember_me"); $output .= form_submit(t("Log in")); $items[] = l(t("Request new password"), "user/password"); if (variable_get("user_register", 1)) { @@ -673,16 +684,18 @@ } function user_logout() { - global $user; + global $user, $base_url; if ($user->uid) { watchdog('user', "session closed for '$user->name'"); - /* - ** Destroy the current session: - */ - + // destroy the current session session_destroy(); + + //expire the 'remember me' cookie + $path = preg_replace("/.+\/\/[^\/]+(.*)/", "\$1/", $base_url); + setcookie('remember_me', '', time()-999, $path); + module_invoke_all('user', "logout", NULL, $user); unset($user); } @@ -1110,6 +1123,7 @@ function user_settings() { // user registration settings $group = form_radios(t("Public registrations"), "user_register", variable_get("user_register", 1), array(t("Only site administrators can create new user accounts."), t("Visitors can create accounts and no administrator approval is required."), t("Visitors can create accounts but administrator approval is required."))); + $group .= form_radios(t("Remember authenticated users"), "user_remember", variable_get("user_remember", 0), array(t("Let the user decide whether he should be logged out when leaving the site."), t("Authenticated users are not logged out upon leaving the site."), t("Authenticated users are logged out upon leaving the site."))); $group .= form_textarea(t("User registration guidelines"), "user_registration_help", variable_get("user_registration_help", ""), 70, 4, t("This text is displayed at the top of the user registration form. It's useful for helping or instructing your users.")); $output = form_group(t("User registration settings"), $group);