0
我有一个php脚本处理传入的ajax请求。它从文本文件中查找一些凭证,如果它们符合要求,它会设置两个Cookie,一个称为用户名,另一个称为客户机上的creds。为什么只有一个cookie在现场保存?
当我从我的本地Web服务器执行此操作时,所有三个cookie都会被设置,我会收到来自回声的所有php反馈。
当我从托管的Web服务器执行此操作时,第一个setcookie工作(“cookies”,“启用”),但接下来的两个不用!然而,我得到所有的回声确认PHP已经达到了我应该设置脚本的地步。请有任何想法吗?我彻底难倒了。
<?php
//george:bloog
//emeline:sparg
setCookie("primacy[cookies]","enabled", time()+3600*24*30,'/');
//convert string to summed int
function pwdInt($pw)
{
$pwdIntVal = 0;
for($i=0; $i<strlen($pw);$i++)
{
$pwdIntVal = $pwdIntVal + (ord(strtolower($pw[$i])) - 96);
}
return $pwdIntVal;
}
//retrieve user account creation date by parsing savefile for accountCreate var
function getACD($aUSR)
{
$saveFileName = "saveFiles/" . $aUSR . ".txt";
echo "Fetched save successfully.<br>";
$lines = file($saveFileName);
foreach($lines as $line)
{
if(explode(":",$line)[0] == "accountCreate");
$lineDate = explode(":",$line)[1];
return $lineDate;
}
}
//accept incoming vars
if(isset($_POST['username']) && !empty($_POST['username']))
{
$uN = strtolower($_POST['username']);
$pwd = strtolower($_POST['password']);
$found = "Invalid user";
//test for presence in creds
$lines = file("creds/creds.txt");
foreach($lines as $line)
{
$lineName = explode("_",$line)[0];
if($uN == $lineName)
{
//matched username before delimiter "_"
$found = $lineName;
echo "Found user, " . explode("_",$line)[0] . " checking password<br>";
//check two: use int of pwd with account creation date from user save
$usrACD = getACD($uN);
echo $usrACD;
if( (pwdInt($pwd) * $usrACD) == (explode("_",$line)[1]) )
{
echo "Tests passed: granting access cookies";
setCookie("uN",$uN, time()+3600*24*30,'/');
setCookie("cred",(pwdInt($pwd) * $usrACD), time()+3600*24*30,'/');
}
else
{
echo "Failed password check for allowed user<br>";
}
}
}
}
else
{
echo $found . pwdInt($pwd) . "<br>";
}
?>
我读到最常见的原因是在标题响应后设置cookie。我不能正确理解ajax调用的时间。我会尝试没有回声,看看它是否工作。你能想一想为什么在我的本地机器上这不是问题吗? – KolKurtz
您可能已在您的配置中启用输出缓冲。它会等待你的所有内容(这种情况下的回声)并缓冲它以避免在标题前发送它,这样你就可以在整个脚本中设置新的标题。当脚本完成执行时,它会发送所有收集的标题,然后发送缓冲区。 – yergo
你说得对!我需要去阅读更多关于回声计时的工作原理。非常感谢。 – KolKurtz