diff --git a/src/metabase/config.clj b/src/metabase/config.clj
index 09f33eff7e9a8644504e933052dccc22ac54b912..459d49a3650713f31f1ff7af03fef6d9d755cf54 100644
--- a/src/metabase/config.clj
+++ b/src/metabase/config.clj
@@ -41,8 +41,10 @@
    2.  jvm options (ex: -Dmb.db.type -> :mb-db-type)
    3.  hard coded `app-defaults`"
   [k]
-  (let [k (keyword k)]
-    (or (k environ/env) (k app-defaults))))
+  (let [k       (keyword k)
+        env-val (k environ/env)]
+    (or (when-not (str/blank? env-val) env-val)
+        (k app-defaults))))
 
 
 ;; These are convenience functions for accessing config values that ensures a specific return type
diff --git a/test/metabase/config_test.clj b/test/metabase/config_test.clj
new file mode 100644
index 0000000000000000000000000000000000000000..b36562ae62e4d33d45f6664e800459ebfbe6e203
--- /dev/null
+++ b/test/metabase/config_test.clj
@@ -0,0 +1,17 @@
+(ns metabase.config-test
+  (:require [clojure.test :refer :all]
+            [environ.core :as environ]
+            [metabase.config :as config]))
+
+(deftest config-parsing
+  (testing "takes value of non-empty env var"
+    (with-redefs [environ/env (assoc environ/env :max-session-age "123")]
+      (is (= "123"
+             (config/config-str :max-session-age)))))
+  (testing "falls back to default if env var is nil or an empty string"
+    (with-redefs [environ/env (assoc environ/env :max-session-age "")]
+      (is (= "20160"
+             (config/config-str :max-session-age))))
+    (with-redefs [environ/env (assoc environ/env :max-session-age nil)]
+      (is (= "20160"
+             (config/config-str :max-session-age))))))