diff --git a/session_api.module b/session_api.module
index 5d763a6..67d26c8 100644
--- a/session_api.module
+++ b/session_api.module
@@ -8,20 +8,20 @@
  */
 
 /**
- * Determine if cookies are enabled.
+ * Implements hook_init().
  */
-function session_api_available() {
-  return !empty($_COOKIE);
+function session_api_init() {
+  // Set a cookie via JavaScript to check if anonymous users support cookies.
+  if (user_is_anonymous()) {
+    drupal_add_js("document.cookie = 'session_api_available=1; path=/';", array('type' => 'inline'));
+  }
 }
 
 /**
- * Create an empty string cookie. This is useful for fooling the
- * session_api_available() function when using Pressflow, which does not set
- * a cookie for anonymous users.
+ * Determine if cookies are enabled.
  */
-function session_api_start_session() {
-  $_SESSION['session_api_session'] = '';
-  drupal_session_start();
+function session_api_available() {
+  return !empty($_COOKIE);
 }
 
 /**
@@ -34,11 +34,6 @@ function session_api_start_session() {
 function session_api_get_sid($create = TRUE) {
   static $sid;
 
-  if ($create) {
-    // Must initialize sessions for anonymous users.
-    session_api_start_session();
-  }
-
   if (!session_api_available()) {
     return FALSE;
   }
@@ -56,7 +51,7 @@ function session_api_get_sid($create = TRUE) {
     else if (!$create) {
       // Return a negative value here, since it won't collide with any
       // session_api IDs.
-    	return -1;
+      return -1;
     }
     else {
       $session_id = drupal_hash_base64(uniqid(mt_rand(), TRUE));
