会话处理程序中的PHP cookies
我在调试自定义PHP会话处理程序时遇到了一个非常有趣的问题。由于我不知道的原因,我可以通过会话处理程序设置cookie,直到write函数开始 据我所知,会话处理程序调用的顺序如下会话处理程序中的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
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()
将无法工作
您可以让它通过使用更早地写入数据。我相信这就是我问题的答案,好的先生。非常感谢你。