diff --git a/django/contrib/sessions/backends/file.py b/django/contrib/sessions/backends/file.py
index 7d933c678a..9588680fea 100644
--- a/django/contrib/sessions/backends/file.py
+++ b/django/contrib/sessions/backends/file.py
@@ -1,6 +1,7 @@
 import datetime
 import errno
 import os
+import shutil
 import tempfile
 
 from django.conf import settings
@@ -147,7 +148,11 @@ class SessionStore(SessionBase):
                     os.write(output_file_fd, self.encode(session_data).encode())
                 finally:
                     os.close(output_file_fd)
-                os.rename(output_file_name, session_file_name)
+
+                # This will atomically rename the file (os.rename) if the OS
+                # supports it. Otherwise this will result in a shutil.copy2
+                # and os.unlink (for example on Windows). See #9084.
+                shutil.move(output_file_name, session_file_name)
                 renamed = True
             finally:
                 if not renamed: