会话处理程序中的PHP cookies

会话处理程序中的PHP cookies,php,cookies,session,Php,Cookies,Session,我在调试自定义PHP会话处理程序时遇到了一个非常有趣的问题。由于我不知道的原因,我可以通过会话处理程序设置cookie,直到write函数开始 据我所知,会话处理程序调用的顺序如下 open -> read -> write -> close open函数可以很好地设置cookie function open($save_path,$session_name) { require_once('database.php'); require_once('we

我在调试自定义PHP会话处理程序时遇到了一个非常有趣的问题。由于我不知道的原因,我可以通过会话处理程序设置cookie,直到write函数开始

据我所知,会话处理程序调用的顺序如下

open -> read -> write -> close
open函数可以很好地设置cookie

function open($save_path,$session_name)  
{  
  require_once('database.php');  
  require_once('websiteinfo.php');
  mysql_connect($sqllocation,$sql_session_user,$sql_session_pass);
  @mysql_select_db($sql_default_db);
  date_default_timezone_set('America/Los_Angeles');  
  setcookie("test","test");
  return TRUE;  
}
read函数可以设置cookie,直到它返回值的那一刻

function read($session_id)
{
  $time = time();
  $query = "SELECT * FROM 'sessions' WHERE 'expires' > '$time'";
  $query_result = mysql_query($query);
  $data = '';

  /* fetch the array and start sifting through it */
  while($session_array = mysql_fetch_array($query_result))
  {
    /* strip the slashes from the session array */
    $session_array = $this->strip($session_array);

    /* authenticate the user and if so return the session data */
    if($this->auth_check($session_array,$session_id))
    {
      $data = $session_array['data'];
    }
  }

  setcookie("testcookie1","value1",time()+1000,'/');

  return $data;
}
write函数的第一行正在设置另一个cookie,但它无法设置,因为标头已发送。

来自以下内容的手册:

注意:“写入”处理程序不可用 执行到输出流之后 关门了。因此,调试的输出 “write”处理程序中的语句将 永远不会在浏览器中看到。如果 调试输出是必要的,是必要的 建议调试输出为 改为写入文件

从本质上讲,在PHP几乎完全完成其执行周期之前,不会对会话数据写入更改(调用已注册的会话写入函数)。此时,您的所有输出都已发送,无法修改标题信息,因此
setcookie()
将无法工作


您可以让它通过使用更早地写入数据。

我相信这就是我问题的答案,好的先生。非常感谢你。