Index: modules/user/user.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/user/user.module,v
retrieving revision 1.865
diff -u -F^f -r1.865 user.module
--- modules/user/user.module	19 Nov 2007 11:24:11 -0000	1.865
+++ modules/user/user.module	20 Nov 2007 04:38:34 -0000
@@ -74,6 +74,10 @@ function user_theme() {
     'user_signature' => array(
       'arguments' => array('signature' => NULL),
     ),
+    'user_no_cookie' => array(
+      'file' => 'user.pages.inc',
+      'arguments' => array('domain' => NULL),
+    ),
   );
 }
 
@@ -895,6 +899,13 @@ function user_menu() {
     'type' => MENU_LOCAL_TASK,
     'file' => 'user.pages.inc',
   );
+  $items['user/no-cookie'] = array(
+    'title' => 'Please enable cookies',
+    'page callback' => 'user_no_cookie',
+    'access callback' => TRUE,
+    'type' => MENU_CALLBACK,
+    'file' => 'user.pages.inc',
+  );
   $items['user/reset/%/%/%'] = array(
     'title' => 'Reset password',
     'page callback' => 'drupal_get_form',
@@ -1247,7 +1258,7 @@ function user_authenticate($name, $pass)
 }
 
 /**
- * A validate handler on the login form. Update user's login timestamp, fire
+ * A submit handler on the login form. Update user's login timestamp, fire
  * hook_user('login), and generate new session ID.
  */
 function user_login_submit($form, &$form_state) {
@@ -1262,7 +1273,10 @@ function user_login_submit($form, &$form
 
     sess_regenerate();
     $form_state['redirect'] = 'user/'. $user->uid;
-    return;
+  }
+  if (!isset($_COOKIE['drupal_login_check'])) {
+    unset($_REQUEST['destination']);
+    drupal_goto('user/no-cookie');
   }
 }
 
Index: modules/user/user.pages.inc
===================================================================
RCS file: /cvs/drupal/drupal/modules/user/user.pages.inc,v
retrieving revision 1.3
diff -u -F^f -r1.3 user.pages.inc
--- modules/user/user.pages.inc	27 Oct 2007 14:01:12 -0000	1.3
+++ modules/user/user.pages.inc	20 Nov 2007 04:38:35 -0000
@@ -367,3 +367,13 @@ function user_page() {
     return drupal_get_form('user_login');
   }
 }
+
+function user_no_cookie() {
+  global $base_url;
+  $url = parse_url($base_url);
+  return theme('user_no_cookie', $url['host']);
+}
+
+function theme_user_no_cookie($domain) {
+  return t('It seems that your browser does not accept cookies. To log into this site, you need to accept cookies from the domain @domain.', array('@domain' => $domain));
+}
Index: includes/session.inc
===================================================================
RCS file: /cvs/drupal/drupal/includes/session.inc,v
retrieving revision 1.42
diff -u -F^f -r1.42 session.inc
--- includes/session.inc	12 Aug 2007 15:55:35 -0000	1.42
+++ includes/session.inc	20 Nov 2007 04:38:36 -0000
@@ -48,6 +48,7 @@ function sess_read($key) {
   else  {
     $session = isset($user->session) ? $user->session : '';
     $user = drupal_anonymous_user($session);
+    setcookie('drupal_login_check', TRUE, time() + 31536000, '/');
   }
 
   return $user->session;
