2010-08-16 6 views
0

Voici la structure web de ma page:php - Comment résoudre ce setcookie délivre

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.?> 

S'il vous plaît un coup d'oeil la ligne 07

destroySession(); // report error here 

Basé sur le manuel php, http://us2.php.net/setcookie les cookies doit être envoyé avant toute sortie de votre script. Ici, le rnheader.php appelle l'écho avant même l'appel de setcookie dans la fonction destroySession.

Alors, comment puis-je changer la structure de la page pour résoudre ce problème?

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 

Merci

+0

Qu'est-ce que l'erreur dit? – Centurion

+0

Nous ne pouvons pas vous dire comment changer la structure, parce que nous ne savons pas que 'rnheader.php' le fait. En règle générale, mettez toutes les commandes d'émission en-tête/cookie avant que quoi que ce soit ne soit sorti. –

+0

@Vadim je peux dire avec un coup d'oeil rapide à la ligne 3 (sans regarder dans rnheader.php) que l'erreur est 'Impossible de modifier les informations d'en-tête - en-têtes déjà envoyés par' (et ainsi de suite;)) – teemitzitrone

Répondre

1

lire le PHP-Manual :: Output Control

si vous ne voulez pas réécrire vos scripts utilisent des fonctions de contrôle de sortie (comme mention ci-dessus)

<?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(); 
?> 
+0

Bonjour Maggie, Cela fonctionne très bien! Je vous remercie – q0987

1

La fonction destroySession() doit être réglée avant d'appeler, donc placer la fonction définie au sommet après la <?php qui fonctionnerait.