2011-06-07 49 views
0

我希望每24小時清理一次會話變量。我不想殺掉或取消所有會話,只需要一個會話,每天24小時不會設置。每24小時進行一次php會話清理

+0

一個會話在哪裏?在服務器上?在客戶端?在月球上? – Neal 2011-06-07 16:45:21

+0

在客戶端上。 – shalamhez 2011-06-07 16:46:43

+0

一個會話變量或一個會話?決定:) – 2011-06-07 16:47:45

回答

0

當客戶端1日創建的會話只要給它一個日期:

if(!isset($_SESSION['date']) 
    $_SESSION['date'] = date('m_d_y'); 

然後,每當該頁面改變檢查日期:

if($_SESSION['date'] == date('m_d_y')){ 
    //still today 
} 
else { 
    //destroy session 
} 

或者你可以根據小時數與時間戳做到這一點,並檢查:

if(!isset($_SESSION['creationTime']) 
    $_SESSION['creationTime'] = time(); 

if (time() - $_SESSION['creationTime'] <= 60*60*24){ 
    //still today 
} 
else { 
    //destroy session 
} 
+0

每24小時!=當日期改變時 – 2011-06-07 16:49:36

+0

@Dvir,是的,但它比計算#在每一頁的當天秒數 – Neal 2011-06-07 16:50:17

+0

@Neal:實際上沒有,你不必計算這個,這是時間的基礎值,現在你使用'date'函數計算日期,那麼你的解決方案是低效的。 – Svisstack 2011-06-07 16:51:13

1

當你創建會話時,寫入它的時間戳。然後,您正在使用seesion檢查實際時間戳和創建會話,然後如果差值超過86400,則刪除會話並創建新會話。

此解決方案可防止用戶使用24小時以上的會話。您可以將其他比較算法應用於例如。防止用戶在當天1AM之前使用會話。那麼當你每天在1AM的時間裏每24小時需要擦除一次會話時,就會非常相似地工作。

2

嘗試設置Cookie的現已過期時間爲()+ 24小時... ...

+0

不是cookie。這是一個會話 – Neal 2011-06-07 16:49:08

+1

實際上session是一個cookie,並且在php.ini中可以設置它的過期時間。 – Svisstack 2011-06-07 16:49:49

+0

關於客戶端,如果我沒有弄錯,並且會話通過Cookie連接到客戶端... – 2011-06-07 16:50:53

0

當創建會話(也許當用戶登錄),聲明會話超時:

session_start(); 
$_SESSION["timeout"] = time()+ (60*60*24); 

創建後端功能/頁面,jQuery的可調用每10秒/ 5秒到你(我把它保存爲get_session .PHP):

session_start(); 
$session_life = time() - $_SESSION["timeout"]; 
$inactive = 0; 

if($session_life > $inactive){ 
    session_destroy(); 
    echo 'Destroyed'; 
} 

運行每5秒jQuery的腳本(推薦在主頁/模板頭/頁的頁腳):

<script type="text/javascript"> 
window.setInterval(function(){ 
    sessionHeartBeat(); 
}, 5000); 
function sessionHeartBeat(){ 
$.ajax({ 
    url: 'get_session.php', 
    success: function(response){ 
    console.log(response); 
    } 
}); 
} 
</script>