php-如何解决此setcookie问题

php-如何解决此setcookie问题,php,Php,以下是我的页面的web结构: 01.<?php // rnlogout.php 02.include_once 'rnheader.php'; 03.echo "<h3>Log out</h3>"; 04. 05.if (isset($_SESSION['user'])) 06.{ 07. destroySession(); // report error here!!!!!! 08. echo "You have been logged out. P

以下是我的页面的web结构:

01.<?php // rnlogout.php
02.include_once 'rnheader.php';
03.echo "<h3>Log out</h3>";
04. 
05.if (isset($_SESSION['user']))
06.{
07.    destroySession(); // report error here!!!!!!
08.    echo "You have been logged out. Please
09.    <a href='index.php'>click here</a> to refresh the screen.";
10.}
11.else echo "You are not logged in";
12.?>

function destroySession()
{
    $_SESSION=array();

    if (session_id() != "" || isset($_COOKIE[session_name()]))
        setcookie(session_name(), '', time()-2592000, '/');

    session_destroy();
}

01.<?php // rnheader.php
02.include 'rnfunctions.php';
03.session_start();
04. 
05.if (isset($_SESSION['user']))
06.{
07.    $user = $_SESSION['user'];
08.    $loggedin = TRUE;
09.}
10.else $loggedin = FALSE;
11. 
12.echo "<html><head><title>$appname";
13.if ($loggedin) echo " ($user)";
14. 
15.echo "</title></head><body><font face='verdana' size='2'>"; // called first!!!!!
16.echo "<h2>$appname</h2>";
17. 
18.if ($loggedin)
19.{
20.    echo "<b>$user</b>:
21.         <a href='rnmembers.php?view=$user'>Home</a> |
22.         <a href='rnmembers.php'>Members</a> |
23.         <a href='rnfriends.php'>Friends</a> |
24.         <a href='rnmessages.php'>Messages</a> |
25.         <a href='rnprofile.php'>Profile</a> |
26.         <a href='rnlogout.php'>Log out</a>";
27.}
28.else
29.{
30.    echo "<a href='index.php'>Home</a> |
31.         <a href='rnsignup.php'>Sign up</a> |
32.         <a href='rnlogin.php'>Log in</a>";
33.}
34.?>
根据php手册,
http://us2.php.net/setcookie
cookies必须在脚本输出之前发送。这里是
rnheader.php
甚至在函数destroySession中的setcookie调用之前调用echo

那么如何更改页面结构来解决此问题呢

The error message is as follows:
Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\LPMJ_examples\robinsnest\rnheader.php:12) in C:\xampp\htdocs\LPMJ_examples\robinsnest\rnfunctions.php on line 41

谢谢

在调用函数destroySession()之前必须先设置它,因此请在阅读

如果不想重写脚本,请使用输出控制函数(如上所述)



我们无法告诉您如何更改结构,因为我们不知道
rnheader.php
会这样做。作为一般规则,在输出任何内容之前放置所有发送头/cookie的命令。@Vadim我可以通过快速查看第3行(不查看rnheader.php)判断错误是
无法修改头信息-头已经由
发送(等等;))你好,Vadim,我已将错误消息附在原始帖子中。谢谢你好Pekka,我已经在原始问题中发布了rnheader.php。谢谢好的,那么您输出一些信息的原因是,在这之后,您尝试使用setcookie()函数再次发送头,尝试在回显之前进行适当的管理。
The error message is as follows:
Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\LPMJ_examples\robinsnest\rnheader.php:12) in C:\xampp\htdocs\LPMJ_examples\robinsnest\rnfunctions.php on line 41
<?php
ob_start();
include_once 'rmheader.php';
echo '<h3>Log Out</h3>';

if (isset($_SESSION['user'])) {
    destroySession(); // report error here!!!!!!
    echo "You have been logged out. Please <a href='index.php'>click here</a> to refresh the screen.";
} else {
    echo "You are not logged in";
}

function destroySession()
{
    $_SESSION=array();

    if (session_id() != "" || isset($_COOKIE[session_name()]))
        setcookie(session_name(), '', time()-2592000, '/');

    session_destroy();
}

ob_end_flush();
?>