为什么cookie值错了?

时间:2014-06-06 17:58:15

标签: php cookies

在我的登录脚本中,我使用md5计算一个值,然后将其存储在数据库中。该行的ID存储在客户端计算机上的cookie中。但是,cookie的值比实际值低1。造成这种情况的原因是什么?

$cookie = md5($_SERVER['REMOTE_ADDR']+$member['username']+$salt)

$tkn = "INSERT INTO cookies (token) VALUES ('$cookie')";
$tknqry = mysql_query($tkn) or die(mysql_error());
$cookievalue = mysql_insert_id();

setcookie("token", $cookievalue, time()+2678400);   

2 个答案:

答案 0 :(得分:0)

根据您在问题中所说的内容进行猜测。如果您使用setcookie()函数,则在发出新请求之前不会更新$_COOKIE数组。

//cookie has a value of 1 already
setcookie('token',2);

var_dump($_COOKIE['token'] == 1); //true
var_dump($_COOKIE['token'] == 2); //false

如果您要刷新页面,那么$_COOKIE['token']的值将等于2.在您的情况下,如果没有设置,您可能只想生成一个新的,所以只需检查是否{{1已设置:

$_COOKIE['token']

仅供参考我不会使用if(!isset($_COOKIE['token'])) { $cookie = md5($_SERVER['REMOTE_ADDR']+$member['username']+$salt) $tkn = "INSERT INTO cookies (token) VALUES ('$cookie')"; $tknqry = mysql_query($tkn) or die(mysql_error()); $cookievalue = mysql_insert_id(); setcookie("token", $cookievalue, time()+2678400); //for debug echo "cookie set to: $cookievalue"; } else { //for debug echo "cookie already set to: {$_COOKIE['token']}"; } 函数,因为它们已被弃用。

答案 1 :(得分:0)

从PHP手册:

http://www.php.net/manual/en/function.mysql-insert-id.php

注意

mysql_insert_id()会将原生MySQL C API函数mysql_insert_id()的返回类型转换为long类型(在PHP中命名为int)。如果AUTO_INCREMENT列的列类型为BIGINT(64位),则转换可能会导致值不正确。而是在SQL查询中使用内部MySQL SQL函数LAST_INSERT_ID()。有关PHP的最大整数值的更多信息,请参阅整数文档。

也许这有点帮助?​​