在我的登录脚本中,我使用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);
答案 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的最大整数值的更多信息,请参阅整数文档。
也许这有点帮助?