我正在开发一个使用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