diff --git a/lib/stealth/session.rb b/lib/stealth/session.rb
index <HASH>..<HASH> 100644
--- a/lib/stealth/session.rb
+++ b/lib/stealth/session.rb
@@ -74,6 +74,7 @@ module Stealth
       else
         $redis.set(user_id, session)
       end
+      persist_session(key: user_id, value: session)
     end
 
     def present?
@@ -131,8 +132,15 @@ module Stealth
         if new_session == session
           Stealth::Logger.l(topic: "previous_session", message: "User #{user_id}: skipping setting to #{session} because it is the same as current_session")
         else
-          Stealth::Logger.l(topic: "previous_session", message: "User #{user_id}: setting to #{session}")
-          $redis.set(previous_session_key(user_id: user_id), session)
+          Stealth::Logger.l(
+            topic: "previous_session",
+            message: "User #{user_id}: setting to #{new_session}"
+          )
+
+          persist_session(
+            key: previous_session_key(user_id: user_id),
+            value: session
+          )
         end
       end
 
@@ -147,5 +155,13 @@ module Stealth
         end.last
       end
 
+      def persist_session(key:, value:)
+        if sessions_expire?
+          $redis.setex(key, Stealth.config.session_ttl, value)
+        else
+          $redis.set(key, value)
+        end
+      end
+
   end
 end
DRY session persistence

This allows us to avoid future errors where we fail to respect session_ttl