2013-12-14 13 views
0

我正在編寫一個腳本..而我需要的東西,將保存會話ID(MD5哈希,蘭德1,1000)變量。我希望能夠從另一個頁面的計算機中調用此cookie。但我只希望它放棄一個到期的cookie,比如10分鐘。PHP - 如何保存一個cookie,並能夠在稍後參考它

我正在編寫一個腳本,用戶可以在其中購買東西,我想要它,所以一旦他們訂購了一些東西,比如說VIP包1,它會檢查它是否出售(在我的switch語句中),它會返回訂購他們商品的網址 - 我想要這個cookie,以便如果他們要訂購一些東西,而且他們已經停用了15分鐘,那麼cookie將被刪除,並且無法訪問下一頁。

我的格式如下:

if(isset($_POST['order'])) 
     { 
    switch($_POST['order']) { 
    case NULL: 
     echo'<b>No order was selected.</b>'; 
     break; 

    case 'vip1': 
     echo 'You are ordering VIP 1!'; 
     break; 

    case 'vip2': 
     echo 'You are ordering VIP 2!'; 
     break; 

    case 'vip3': 
     echo 'You are ordering VIP 3!'; 
     break; 

    case 'vip4': 
     echo 'This is test 3!'; 
     break; 
      } 
       } else { echo '<form action="shop.php" method="post"> 
    <input type="radio" name="order" value="vip1">VIP Package 1<br /> 
    <input type="radio" name="order" value="vip2">VIP Package 2<br /> 
    <input type="radio" name="order" value="vip3">VIP Package 3<br /> 
    <!--<input type="hidden" name="order"/>--> 
    <input type="submit" value="Submit"> 
    </form>'; } 

現在,回聲,將包含購買該項目的鏈接。但是我希望某個地方在他們訪問該頁面時生成一個cookie,並且一旦他們選擇要購買的項目,就會給他們購買它的URL。當他們訪問該URL(checkout.php)時,我希望它能檢查他們是否有一個有效的cookie(他們不需要檢查ID,只是爲了查看他們是否有來自我們網站的實際cookie,它包含購買ID) - 以及Cookie的原因。這是否是possilbe?

回答

0

您可以創建一個類的實例來管理您的cookies的例子:

class CookieStorage { 
    protected $cookie; 

    function __construct() {} 

    //The setter function for the cookie 
    public function set($key,$value,$expire=900) { 
     //This will only update the cookie IF it is not already there. 
     if(!$this->get($key)) { 
      set_cookie($key,$value,$expire); 
     } 
    } 

    //The getter function for the cookie 
    public function get($key) { 
     if(isset($_COOKIE[$key])) { 
      $this->cookie = $_COOKIE[$key]; 
      return $this->cookie; 
     } else { 
      return false; 
     } 
    } 

}

你可以在技術上做到這一點的一類外,通過調用$_COOKIE[$key]來調用這個值,但是這樣做的好處是你有一個可以返回的工作實例,你可以取消訪問全局變量le $ _COOKIE,你可以在一個地方添加額外的邏輯。這節省了您不得不更新每個檢查cookie的地方的麻煩。

要調用這個你只需做到以下幾點:

$cookie = new CookieStorage(); 
$cookie->set($key,$value); 

,並檢索:

$cookie->get($key); 
+0

我試過這個:http://pastebin.com/8GnpS79J - 但它不會使用:$ _COOKIE [「sec_check_id」] – Reverb

+0

將回顯中的cookie顯示出來,我已經複製了你的代碼,它適用於我,所以你有設置問題。您是否在瀏覽器上屏蔽了第一方Cookie?或者 - 你是否在代碼的開頭添加了你的cookie,在任何HTML之前?因爲如果你不這樣做,那可能是問題所在:) – smcjones

0

您只需使用setcookie函數設置cookie。 More information here

爲10分鐘,到期

setcookie("name", $value, time()+600); /* expires in 10 minutes */ 
+0

對,我感謝您的幫助:)因此,讓我得到這個權利。 「名稱」將是cookie的名稱?正確? $值將是我給他們的安全ID,然後是時間?現在,這個cookie會在未來的頁面中從我的網站抓取,就像它的變量一樣? ($ value) - 另外,如何設置它,因此只有1個cookie被髮出,是否有方法檢查我的網站是否已經有cookie(如IF cookie = true,否則給cookie) – Reverb

+0

您可以覆蓋現有的cookie與setcookie,只要你使用相同的密鑰。您可以使用$ _COOKIE [$ key]進行檢索;如果你願意,你可以在它周圍添加邏輯。 – smcjones

+0

我試過這個:http://pastebin.com/8GnpS79J - 但它不會顯示在回聲中的cookie,使用:$ _COOKIE [「sec_check_id」] – Reverb

相關問題