【发布时间】:2010-04-22 23:09:23
【问题描述】:
我在尝试调试我的自定义 PHP 会话处理程序时遇到了一个非常有趣的问题。由于某种我不知道的原因,我可以通过会话处理程序一直设置 cookie,直到写入函数的最开始。
据我所知,会话处理程序调用按此顺序进行。
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,它不能,因为 headers 已经发送。
【问题讨论】: