2013-04-18 70 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