2013-04-24 57 views
0

我寫了一個函數,用於檢查cookie是否已設置,如果未設置,則設置cookie。在函數中檢查並設置cookie

因爲cookie不是馬上可用的,所以我需要刷新頁面一次,因此我可以訪問該值。

但是,當我調用該函數時,它只是不斷重新加載頁面。當它在功能外正常工作。只有當它在一個函數內部時,我纔會這樣做。

function getCookie(){ 
    if(isset($_COOKIE['ID'])){ 
     $cookieID = $_COOKIE['ID']; 
    } 
    else{ 
     //generate random value for cookie id 
     $charid = strtoupper(md5(uniqid(rand(), true))); 
     $uuid = substr($charid, 0, 8) 
       .substr($charid,20,12); 

     setcookie("ID", $uuid, strtotime('+7 days')); 
     $cookieID = $_COOKIE['ID']; 
     echo "<META HTTP-EQUIV='Refresh' CONTENT='0'> "; 
    } 
    echo $cookieID; 
} 
+0

在那裏你可以打電話給你的'get_cookie()'函數? – Ranjith 2013-04-24 10:20:57

+0

在index.php文件中,它包含了header.php文件>它包含了包含這個函數的functions.php – user2183216 2013-04-24 10:25:37

+0

以正確的方式檢查函數,例如'echo'hello';'類似於那。 – Ranjith 2013-04-24 10:29:05

回答

1

這裏有一個簡單的PHP網頁...

<?php 

function getCookie(){ 
    if(isset($_COOKIE['ID'])){ 
     $cookieID = $_COOKIE['ID']; 
    } 
    else{ 
     //generate random value for cookie id 
     $charid = strtoupper(md5(uniqid(rand(), true))); 
     $uuid = substr($charid, 0, 8) 
       .substr($charid,20,12); 

     setcookie("ID", $uuid, strtotime('+7 days')); 
     $cookieID = $_COOKIE['ID']; 

     //just assign the cookie the value as if it was in the header. 
     //no refresh needed. 
     $_COOKIE['ID'] = $uuid; 

    } 
} 

?> 
<html> 
<body> 
<?php 
    getCookie(); 
    echo $_COOKIE['ID']; 
?> 
</body> 
</html> 
+0

我會爲time()+(60 * 60 * 24 * 7)'或'time()+ 604800'改變'strtotime('+7 days')'...但是它對我來說很有用並且沒有它 – 2013-04-24 10:23:27

+0

引發已經發送的頭文件錯誤: 警告:無法修改頭文件信息 - 頭文件已經發送(輸出開始於**************/header.php:6) – user2183216 2013-04-24 10:23:54

+0

我編輯了包含完整php頁面的答案。它測試的很好,所以你需要檢查你的頁面結構。 – 2013-04-24 10:39:29

0

檢查什麼excacly isset回報。從你的描述看來,在第一次執行此代碼後,根本沒有設置cookie。在FireFox中,如果使用firebug工具設置cookie,則可以嘗試。

一個好主意是,還可以比較if的任何類型的數據,以替代if(isset($some_var) === true){而不是if(isset($some_Var)){。記住:

$v = 0;

if($v == 0){ }返回true

if($v === 0){ }返回true

if($v == false){ }返回true

if($v === false){ }返回假

+0

實際上我是否需要某種全局變量來將它包含在函數中?該函數是否可以訪問$ _COOKIE ['ID']? – user2183216 2013-04-24 10:34:29

+0

如果你的PHP(比手冊中的4.1.0版本更高)版本使用'$ _COOKIE',它應該可以從函數或類的任何代碼點訪問。 – ThePueblo 2013-04-24 10:36:24

+0

我檢查了你的第一個代碼。這一切似乎都可以,所以如果你有問題,我強烈建議檢查PHP設置和版本。你可以像'var_dump($ _ COOKIE);'一樣拋出線,如果有正確的變量,它總是應該是一個數組,如果你的cookie將被設置,這行應該拋出一個cookie(所有cookie :))值。 – ThePueblo 2013-04-24 10:43:12