2013-04-18 89 views
2

我正在開發一個使用cookie的localhost上的網站。我有一個函數生成一個隨機的25個字符的字符串,它將被存儲在數據庫中,並在用戶瀏覽器上設置爲一個參考cookie。無法訪問現有的php cookie

我搜查了互聯網和本網站,但無法找到我的問題的解決方案。

下面的相關代碼


function generateRandomString($length){ 
    $string = ""; 
    $possible = "abcdefghijklmnopqrstuvwABCDEFGHIJKLMNOPQRSTUVW"; 
    $maxlength = strlen($possible); 
    if($length > $maxlength){ 
     $length = $maxlength; 
    } 
    $i = 0; 
    while($i < $length){ 
     $char = substr($possible, mt_rand(0, $maxlength-1), 1); 
     if(!strstr($string, $char)){ 
      $string .= $char; 
      $i++; 
     } 
    } 
    return $string; 
} 

$uCookie = generateRandomString(25); 

setcookie('uHash', $uCookie, time()+60*60*24*30); 

$stmt = $dbh->prepare(' 
    UPDATE User 
    SET u_UserCookie = :cookie 
    WHERE u_UserId = :id 
'); 

$stmt->execute(array(
    ':cookie' => $uCookie, 
    ':id' => $user_id 
)); 

的概述現在,當我嘗試echo($_COOKIE['uHash']);我得到一個空字符串。

奇怪的是,當我檢查我的鉻偏好,Cookie並不存在

Name: uHash 
Content: 134uHnEPrCmBNGqeAjhRSUiJL 
Domain: localhost 
Path: /~path/to/login 
Send for: Any kind of connection 
Accessible to script: Yes 
Created: Wednesday, April 17, 2013 4:21:27 PM 
Expires: Friday, May 17, 2013 4:21:27 PM

字符串「134uHnEPrCmBNGqeAjhRSUiJL」也可以在數據庫中找到,使作品

我失去了關於cookie的一些基本信息(在本地主機上)?

解決

的問題是,根據php.net

「該網域名稱必須含有至少兩個點(。),因此‘本地主機’是無效的,並且瀏覽器將拒絕設置cookie 「

所以我解決它做這個


$domain = ($_SERVER['HTTP_HOST'] != 'localhost') ? $_SERVER['HTTP_HOST'] : false; 
setcookie('uHash', $uCookie, time()+60*60*24*30, '/', $domain, false);
+3

你們是不是在設置相同的腳本讀取'$ _COOKIE'? – Barmar 2013-04-18 07:02:23

+0

您使用的是Chrome嗎? – 2013-04-18 07:12:52

+0

不,它不在同一頁上。該cookie設置在登錄頁面中,我嘗試在索引頁面上顯示cookie值而沒有任何結果。是的,我使用Chrome – Maurice 2013-04-18 07:13:10

回答

1

看到這個問題: Cookies on localhost with explicit domain

Cookie中的域名必須包含兩個點。因此本地主機無效。

+0

就是這樣,thnx! – Maurice 2013-04-18 07:16:51

+0

奇怪...... OP沒有在'setcookie()'中設置一個域,他還聲稱瀏覽器實際上接受了cookie。 – 2013-04-18 07:34:31

0

確保您嘗試訪問該cookie在正確的道路/域名:

setcookie ('uHash', $uCookie, time()+60*60*24*30, /path/of/the/website, false); 

您需要重定向到其標題發送您的Cookie,然後才能抓住它。

請參閱setcookie doc

0

我們沒有所有相關的代碼,但我想它看起來像這樣:

setcookie('uHash', $uCookie, time()+60*60*24*30); 
echo $_COOKIE['uHash']; 

the manual

一旦餅乾已經確定,就可以把他們的訪問下一個第 加載$ _COOKIE或$ HTTP_COOKIE_VARS數組。

如果你絕對需要它在同一頁上,你也許可以做到這一點:

setcookie('uHash', $uCookie, time()+60*60*24*30); 
$_COOKIE['uHash'] = $uCookie; 
echo $_COOKIE['uHash']; 
+0

不,它不在同一頁上。該cookie設置在登錄頁面中,我嘗試在索引頁面上顯示cookie值而沒有任何結果 – Maurice 2013-04-18 07:12:25