输出发送到浏览器后设置cookie

use*_*737 3 php cookies

有没有办法可以在html输出后设置cookie?根据PHP手册,setcookie()应该在输出之前设置.

我需要它用于我的投票系统,其中在成功的Mysql查询之后将设置cookie.我把它放在一个文件中.

big*_*gkm 10

您可以使用输出缓冲区,因此在脚本的顶部添加ob_start(),这将创建一个缓冲区,然后您可以设置cookie然后结束缓冲区并刷新到浏览器.

ob_start();
/* set cookie */
ob_end_flush();
Run Code Online (Sandbox Code Playgroud)

  • @hakre通常是一个很好的编码实践,包括两者.清晰度更好.此外,在使用多个嵌套的ob_start()时,它是必要的 (3认同)

hak*_*kre 5

有没有办法可以在html输出后设置cookie?

技术上没有.如果您想设置cookie,您需要确保到目前为止尚未向浏览器发送任何输出.

根据PHP手册setcookie()应该在输出之前设置.

这是正确的,否则它将无法正常工作.所以我甚至会说必须,不仅应该.

我需要它用于我的投票系统,其中在成功的mysql查询之后将设置cookie.

一个成功的mysql查询就不会创建任何输出.如果启用了错误报告,则只有失败的mysql查询.所以我想知道你是否真的遇到了一个具体的问题.

mysql查询本身不应该阻止你使用setcookie.

如果您在使用之前已经完成HTML输出,则setcookie需要找到HTML输出开始的位置.在该行之上放置ob_startDocs函数,它将启动输出缓冲.

启用输出缓冲后,您的程序仍然可以"输出"HTML,但不会立即发送.然后你应该能够setcookie没有问题地打电话:

<?php ob_start(); ?>
<html><body>
<?php 
  $result = mysql_run_query($query);
  echo '<h1>Your Voting Results</h1>';
  output_voting_result($result);
  set_cookie('vote', $result['id']);
?>
</body></html>
Run Code Online (Sandbox Code Playgroud)

当脚本完成时,输出缓冲区将自动发送到浏览器,因此您不需要关心更多,其余的工作将自动进行.