diff -rup a/includes/webform.submissions.inc b/includes/webform.submissions.inc
--- a/includes/webform.submissions.inc	2012-09-14 12:18:37.000000000 -0400
+++ b/includes/webform.submissions.inc	2013-03-12 14:46:45.457246749 -0400
@@ -145,8 +145,8 @@ function webform_submission_delete($node
   }
 
   // Delete any anonymous session information.
-  if (isset($_SESSION['webform_submission'][$submission->sid])) {
-    unset($_SESSION['webform_submission'][$submission->sid]);
+  if (isset($_SESSION['webform_submission'][$node->nid])) {
+    unset($_SESSION['webform_submission'][$node->nid]);
   }
 
   db_delete('webform_submitted_data')
@@ -627,7 +627,7 @@ function webform_get_submissions($filter
 
     if (isset($filters['u.uid']) && $filters['u.uid'] === 0) {
       if (!empty($_SESSION['webform_submission'])) {
-        $anonymous_sids = array_keys($_SESSION['webform_submission']);
+        $anonymous_sids = array_values($_SESSION['webform_submission']);
         $pager_query->condition('sid', $anonymous_sids, 'IN');
       }
       else {
diff -rup a/webform.module b/webform.module
--- a/webform.module	2013-03-01 01:59:36.458489000 -0500
+++ b/webform.module	2013-03-12 15:02:22.467247000 -0400
@@ -423,7 +423,7 @@ function webform_submission_access($node
   $account = isset($account) ? $account : $user;
 
   $access_all = user_access('access all webform results', $account);
-  $access_own_submission = isset($submission) && user_access('access own webform submissions', $account) && (($account->uid && $account->uid == $submission->uid) || isset($_SESSION['webform_submission'][$submission->sid]));
+  $access_own_submission = isset($submission) && user_access('access own webform submissions', $account) && (($account->uid && $account->uid == $submission->uid) || isset($_SESSION['webform_submission'][$node->nid]));
   $access_node_submissions = user_access('access own webform results', $account) && $account->uid == $node->uid;
 
   $general_access = $access_all || $access_own_submission || $access_node_submissions;
@@ -1519,9 +1519,14 @@ function webform_node_view($node, $view_
 
   // Check if this user has a draft for this webform.
   $is_draft = FALSE;
-  if (($node->webform['allow_draft'] || $node->webform['auto_save']) && $user->uid != 0) {
+  if (($node->webform['allow_draft'] || $node->webform['auto_save'])) {
     // Draft found - display form with draft data for further editing.
-    if ($draft_sid = _webform_fetch_draft_sid($node->nid, $user->uid)) {
+    if ($user->uid != 0) {
+      $draft_sid = _webform_fetch_draft_sid($node->nid, $user->uid);
+    } else {
+      $draft_sid = $_SESSION['webform_submission'][$node->nid];
+    }
+    if ($draft_sid) {
       module_load_include('inc', 'webform', 'includes/webform.submissions');
       $submission = webform_get_submission($node->nid, $draft_sid);
       $enabled = TRUE;
@@ -1974,7 +1979,7 @@ function webform_client_form($form, &$fo
     );
 
     // Add the draft button.
-    if ($node->webform['allow_draft'] && (empty($submission) || $submission->is_draft) && $user->uid != 0) {
+    if ($node->webform['allow_draft'] && (empty($submission) || $submission->is_draft)) {
       $form['actions']['draft'] = array(
         '#type' => 'submit',
         '#value' => t('Save Draft'),
@@ -2506,8 +2511,8 @@ function webform_client_form_submit($for
 
     // Save session information about this submission for anonymous users,
     // allowing them to access or edit their submissions.
-    if (!$user->uid && user_access('access own webform submissions')) {
-      $_SESSION['webform_submission'][$form_state['values']['details']['sid']] = $node->nid;
+    if (!$user->uid) {
+      $_SESSION['webform_submission'][$node->nid] = $form_state['values']['details']['sid'];
     }
   }
   else {
