diff --git a/include/class.ostsession.php b/include/class.ostsession.php
index 94df679d2792046fda2b7373e598851f147a501b..b300f16ec7a826443e3e1fb52530a7c88bd6486b 100644
--- a/include/class.ostsession.php
+++ b/include/class.ostsession.php
@@ -69,6 +69,23 @@ class osTicketSession {
         $this->destroy($oldId);
     }
 
+    static function destroyCookie() {
+        setcookie(session_name(), 'deleted', 1,
+            ini_get('session.cookie_path'),
+            ini_get('session.cookie_domain'),
+            ini_get('session.cookie_secure'),
+            ini_get('session.cookie_httponly'));
+    }
+
+    static function renewCookie($baseTime=false, $window=false) {
+        setcookie(session_name(), session_id(),
+            ($baseTime ?: time()) + ($window ?: SESSION_TTL),
+            ini_get('session.cookie_path'),
+            ini_get('session.cookie_domain'),
+            ini_get('session.cookie_secure'),
+            ini_get('session.cookie_httponly'));
+    }
+
     function open($save_path, $session_name){
         return (true);
     }
diff --git a/include/class.usersession.php b/include/class.usersession.php
index 9e7fd277baf58d59b39ade1255bd29a1308493a4..9447c109f784af9273642943158019f24e2d07b4 100644
--- a/include/class.usersession.php
+++ b/include/class.usersession.php
@@ -133,6 +133,8 @@ class ClientSession extends EndUser {
     }
 
     function refreshSession($force=false){
+        global $cfg;
+
         $time = $this->session->getLastUpdate($this->token);
         // Deadband session token updates to once / 30-seconds
         if (!$force && time() - $time < 30)
@@ -140,6 +142,8 @@ class ClientSession extends EndUser {
 
         $this->token = $this->getSessionToken();
         //TODO: separate expire time from hash??
+
+        osTicketSession::renewCookie($time, $cfg->getClientSessionTimeout());
     }
 
     function getSession() {
@@ -177,12 +181,16 @@ class StaffSession extends Staff {
     }
 
     function refreshSession($force=false){
+        global $cfg;
+
         $time = $this->session->getLastUpdate($this->token);
         // Deadband session token updates to once / 30-seconds
         if (!$force && time() - $time < 30)
             return;
 
         $this->token=$this->getSessionToken();
+
+        osTicketSession::renewCookie($time, $cfg->getStaffSessionTimeout());
     }
 
     function getSession() {
diff --git a/logout.php b/logout.php
index 74d73cc377b58049f286551771ff880dfc800fab..9fb8037acd458c9998c126d6d17ec533fbac7b57 100644
--- a/logout.php
+++ b/logout.php
@@ -19,6 +19,7 @@ require('client.inc.php');
 if ($thisclient && $_GET['auth'] && $ost->validateLinkToken($_GET['auth']))
    $thisclient->logOut();
 
+osTicketSession::destroyCookie();
 
 Http::redirect('index.php');
 ?>
diff --git a/scp/logout.php b/scp/logout.php
index bdc697c78beceb7b4cf3185603f45afbcf8d2838..1007d985c0bb8509514f42d55d91103571b3f965 100644
--- a/scp/logout.php
+++ b/scp/logout.php
@@ -31,6 +31,8 @@ TicketLock::removeStaffLocks($thisstaff->getId());
 session_unset();
 session_destroy();
 
+osTicketSession::destroyCookie();
+
 @header('Location: login.php');
 require('login.php');
 ?>