我正在開發一個使用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);
你們是不是在設置相同的腳本讀取'$ _COOKIE'? – Barmar 2013-04-18 07:02:23
您使用的是Chrome嗎? – 2013-04-18 07:12:52
不,它不在同一頁上。該cookie設置在登錄頁面中,我嘗試在索引頁面上顯示cookie值而沒有任何結果。是的,我使用Chrome – Maurice 2013-04-18 07:13:10