2010-03-05 68 views
1

我想知道,如何在閒置後(例如:10分鐘)刪除所有特定的cookie。在特定的閒置時間後過期某些cookie

IM在確保PHP項目和步驟一個工作是這個

我應該刪除在PHP/MySQL的項目一定量的閒置時間後保存在MySQL管理的cookie和session

有任何建議!?

回答

0

在cookie和db中保存一個隨機字符串,在db中也保存到期時間.. 當客戶端執行請求時從cookie中獲取字符串並檢查有關的到期時間在db ... if time傳遞摧毀的cookie,否則不...

<?php 

    //retrive cookies if exist the hash stored in it. 
    //cookie don't exist save the cookie 
    if(!$_COOKIE){ 
    //create a random string in $rnd_string and the expire date in $data 
    setcookie("hash", $rnd_string); 
    //sql connection here 
    //adding rows to db.. 
    mysql_query("INSERT INTO table (expiredate, hash) VALUES ('".$data."','".$rnd_string."')"); 
    } 
    else{ 
    //here the code if cookie exist 
    $hash=$_COOKIE['hash']; 
    //sql connection here 
    //retrieving row from db 
    $result=mysql_fetch_array(mysql_query("SELECT expiredate FROM table WHERE hash='".$hash."'")); 
    //in $result['expiredate'] you'll have the expire date, check this with server time and decide if is session is valid or not...   
    } 
+0

會不會介意給我代碼示例? – 2010-03-06 07:14:03

+0

更新了一個簡單的愚蠢代碼的答案..但它是一個例子,我希望它可以對你有用... – Marcx 2010-03-06 11:17:02

1

那麼,你應該永遠不會存儲任何Cookie中的重要,所以你應該真的只有存儲在cookie中的會話ID。

只需將該cookie設置爲10分鐘即可過期。將相同的時間戳存儲在數據庫中。

之後,也就是說,5分鐘,你需要做什麼,然後設置Cookie在10分鐘過期和更新會話

後,比方說,11多分鐘後,該cookie不會提供,並且您可以將用戶轉發到您的「未通過身份驗證的頁面」。

在cron作業或每個頁面加載中,刪除過去有過期時間的任何會話。

+0

@Pickle:我一直在你身邊,直到你建議嘗試使用cron管理會話。雖然會話數據可以持續超過被認爲已經過期的時間,但會話處理程序應該認識到並拒絕訪問。 – symcbean 2010-03-07 00:10:29

+0

是的,當然。我只是建議保持數據庫的大小。沒有必要在一週前過期的時候保留一個會話密鑰,所以你最好刪除它。 – Pickle 2010-03-08 18:01:14

-1

難道你不能只設置每個頁面上的cookie到10 * 60?