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