为什么现场只保存一个cookie?

时间:2016-06-09 10:54:22

标签: php ajax cookies

我有一个PHP脚本处理传入的ajax请求。它从文本文件中查找一些凭据,如果它们符合要求,则会设置两个cookie,一个名为username,另一个名为客户端计算机上的cred。

当我从我的本地Web服务器执行此操作时,所有三个cookie都已设置,我从回声中收到所有php反馈。

当我从我的托管网络服务器执行此操作时,第一个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>";
  }

?>

1 个答案:

答案 0 :(得分:1)

您应该在setCookie方法之后启用输出缓冲或移动回声。设置cookie是在响应标题期间发生的事情。所有标题都应在内容之前发送。回应事物正在设置内容,因此第一次回声后的每个标题版本(如设置cookie)都将失败。