我在 php 使用自己的代码登录,现在我不太擅长 jquery ajax 等等,我使用 ajax jquery 类型 json 登录,我将所有 val 发布到服务器端 php 以检查所有详细信息,并通过响应回答相同的 jquery ajax 。
问题是我在登录表单中添加了在 php 中制作的 nonce 令牌,并且每次用户尝试登录 nonce 更改后,问题只是当我刷新登录页面时 nonce 更改为好的 nonce 否则它将保持不变nonce 令牌并将与帖子一起发送,而不是更新的,因为 ajax 在登录后没有刷新页面。
所以问题是我如何在每次响应后触发 ajax 来刷新 nonce 令牌?nonce 令牌是用 php 编写的。
还有更多关于哈希随机数令牌的事情,它有时会生成哈希字符串:
asdaskjn34kj+sdf/sd=
现在ajax jquery自动从哈希字符串中删除'+',因此它在POST中发送错误的令牌,这里是我的哈希函数:
public static function RandomBytes($count, $printable=FALSE)
{
$bytes = '';
// supress warnings when open_basedir restricts access to /dev/urand
if(@is_readable('/dev/urandom') && ($hRand = @fopen('/dev/urandom', 'rb')) !== FALSE)
{
$bytes = fread($hRand, $count);
fclose($hRand);
}
if((strlen($bytes) < $count) && function_exists('mcrypt_create_iv'))
{
// Use MCRYPT_RAND on Windows hosts with PHP < 5.3.7, otherwise use MCRYPT_DEV_URANDOM
// (http://bugs.php.net/55169).
if ((version_compare(PHP_VERSION, '5.3.7', '<') && strncasecmp(PHP_OS, 'WIN', 3) == 0))
$bytes = mcrypt_create_iv($count, MCRYPT_RAND);
else
$bytes = mcrypt_create_iv($count, MCRYPT_DEV_URANDOM);
}
if((strlen($bytes) < $count) && function_exists('openssl_random_pseudo_bytes')) // OpenSSL slow on Win
{
$bytes = openssl_random_pseudo_bytes($count);
}
if ((strlen($bytes) < $count) && @class_exists('COM'))
{
// Officially deprecated in Windows 7
// http://msdn.microsoft.com/en-us/library/aa388182%28v=vs.85%29.aspx
try
{
$CAPI_Util = new COM('CAPICOM.Utilities.1');
if(is_callable(array($CAPI_Util,'GetRandom')))
{
$bytes = $CAPI_Util->GetRandom(16,0);
$bytes = base64_decode($bytes);
}
}
catch (Exception $ex)
{
}
}
if (strlen($bytes) < $count)
{
// This fallback here based on phpass code
$bytes = '';
$random_state = microtime();
if (function_exists('getmypid'))
$random_state .= getmypid();
for ($i = 0; $i < $count; $i += 16) {
$random_state =
md5(microtime() . $random_state);
$bytes .=
pack('H*', md5($random_state));
}
$bytes = substr($bytes, 0, $count);
}
if ($printable)
return base64_encode($bytes);
else
return $bytes;
}
任何人都知道如何更改此函数以使哈希中没有“+”的字符串?