Index: uc_cart.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/ubercart/uc_cart/uc_cart.module,v
retrieving revision 1.15.2.31
diff -u -p -r1.15.2.31 uc_cart.module
--- uc_cart.module	2 Nov 2009 22:04:08 -0000	1.15.2.31
+++ uc_cart.module	9 Jan 2010 03:58:10 -0000
@@ -19,6 +19,15 @@ require_once('uc_cart.ca.inc');
  ******************************************************************************/
 
 /**
+ * Implementation of hook_boot().
+ */
+function uc_cart_boot() {
+  if (!isset($_SESSION['uc_cart_id'])) {
+    uc_cart_get_id();
+  }
+}
+
+/**
  * Implementation of hook_menu().
  */
 function uc_cart_menu() {
@@ -170,7 +179,14 @@ function uc_cart_menu() {
     'type' => MENU_CALLBACK,
     'file' => 'uc_cart.pages.inc',
   );
-
+  $items['cart/ajax/id'] = array(
+    'title' => 'Add cart ID',
+    'description' => 'Add a cart id session cookie',
+    'page callback' => 'uc_cart_get_id_ajax',
+    'access arguments' => array('access content'),
+    'type' => MENU_CALLBACK,
+  );
+  
   return $items;
 }
 
@@ -268,6 +284,7 @@ function uc_cart_init() {
   $conf['i18n_variables'][] = 'uc_msg_order_logged_in';
   $conf['i18n_variables'][] = 'uc_msg_order_new_user';
   $conf['i18n_variables'][] = 'uc_msg_order_submit';
+  drupal_add_js(drupal_get_path('module', 'uc_cart'). '/uc_cart.ajax.js');
 }
 
 /**
@@ -859,6 +876,14 @@ function uc_cart_checkout_pane() {
  ******************************************************************************/
 
 /**
+ * Callback function for allowing Ajax callbacks to set the cart $_SESSON var.
+ */
+function uc_cart_get_id_ajax() {
+  $cid = uc_cart_get_id();
+  return drupal_json($cid);
+}
+
+/**
  * When a user logs in, update their cart items before the session changes.
  */
 function uc_cart_user_login_form_submit($form, &$form_state) {
@@ -1311,7 +1336,10 @@ function uc_cart_get_id() {
   global $user;
 
   if ($user->uid) {
-    return $user->uid;
+    if (!isset($_SESSION['uc_cart_id'])) {
+      $_SESSION['uc_cart_id'] = $user->uid;
+      return $user->uid;
+    }
   }
   elseif (!isset($_SESSION['uc_cart_id'])) {
     $_SESSION['uc_cart_id'] = md5(uniqid(rand(), TRUE));
