Une variable de session qui disparaît

Fermé
ivan - 12 sept. 2013 à 21:24
 ivan - 15 sept. 2013 à 20:25
Bonjour,

Bonjour, je suis confronté à un problème lorsque je unset une variable de session. Je ne peux plus la printer dans le document alors que ça fonctionne quand je ne fais pas.



unset($_SESSION['messageCommunication'])




$_SESSION['messageCommunication'] = "";
La variable est assignée dans une fonction juste avant le redirect sur la page index ci dessous. Par ailleurs il y a un ob_start() et un ob_end_flush() sur la page. Est-ce que ça joue ?






<?php
if(!isset($_SESSION))@session_start();

ob_start();
...

echo "<div class='message'>".$_SESSION['messageCommunication']."</div>".$pageContent;

?>

...

</html>
<?php
}
ob_end_flush();
unset($_SESSION['messageCommunication']); // quand je ne le mets pas ça fonctionne !
?>

Quelqu'un a déjà été confronté à ce problème ?



oici le code de la page à tout hasard :

<?php
if(!isset($_SESSION))@session_start();
$msg = $_SESSION['messageCommunication'];
ob_start();

require_once('./includes/constantes.inc.php');
require_once(DIR_INCLUDE . '/function.inc.php');
require_once(DIR_INCLUDE . '/bbcode.inc.php');
require_once(DIR_INCLUDE . '/pdo.inc.php');
require_once(DIR_INCLUDE . '/date.php');
require_once(DIR_INCLUDE . '/class_date.php');
require_once(DIR_INCLUDE . '/fil_ariane.php');
require_once(DIR_INCLUDE . '/classes/HeaderMail.class.php');
require_once(DIR_INCLUDE . '/classes/Mail.class.php');

startSavedSession(); //On demarre le chargement de la session via un cookie si il existe
memberUpdateTimeVisite(); //Rafraichissement du time connecté des membres
updatePeopleOnline(); //Mise à jour du whosonline


$lien = DIR_IMAGE;
if(isset($_GET['m']))
{
$dirModule = DIR_MODULE . "/" . htmlspecialchars($_GET['m']);
$fichier = (isset($_GET['sm']) && !empty($_GET['sm'])) ? htmlspecialchars($_GET['sm']) : "index";

if(file_exists($dirModule) && file_exists($dirModule . "/" . $fichier . ".php"))
{
include $dirModule."/".$fichier.".php";
}
else
{
if(file_exists(DIR_MODULE . "/{$_GET['m']}.php"))
include DIR_MODULE . "/{$_GET['m']}.php";
else
{
include DIR_MODULE . "/404.php";

$_GET['m'] = '404';
$_GET['sm'] = null;
}
}
}
else
{
include DIR_MODULE . "/index.php";
}

// debug
/*echo '<div id="DEBUG:REQUEST" style="display:none;">';
var_dump($_REQUEST);
echo '</div>';*/

outputcontent();

function outputcontent()
{
global $pageContent, $pdo, $pageTitle; //, $isRedirected;
if(!isset($pageContent))
$pageContent = ob_get_contents();

ob_clean();
?>
<?php
/*function goMpAlert($id){
$reponse = new xajaxResponse();
$reponse->assign('mpAlert_Box'.$id,'innerHTML','Test');
return $reponse;
}

require_once('./includes/xAjax/xajax_core/xajax.inc.php');
$xajax = new xajax(); // On initialise l'objet xajax.
$xajax->configure("javascript URI","./includes/xAjax/");
$xajax->register(XAJAX_FUNCTION, 'goMpAlert'); // D�claration de la fonction MaFonctionPHP.
$xajax->processRequest(); // Fonction qui va se charger de g�n�rer le Javascript � partir des donn�es que l'on a fournies � xAjax.*/

$path = substr($_SERVER['REQUEST_URI'],strpos($_SERVER['REQUEST_URI'],"//"));
$epath = explode("/",$path);
$bpath = "";


for($i=0;$i<count($epath)-1;$i++)
{
if($i > 0 && $i%2==0)
$bpath .= "/";

$bpath .= ".";

}
?>
<!DOCTYPE html>
<html lang="fr">

<head>
<?php
$desc = $pdo->query("SELECT * FROM forum_site_concept");
$description = $desc->fetch(PDO::FETCH_ASSOC);
?>
<!-- meta -->
<meta charset="UTF-8"/>
<meta name="keywords" content="Site,Communautaire,Sortie organisé,Leprojet,Le projet,leprojet"/>
<!--portable -->
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<meta name="description" content=""/>
<meta name="author" content=""/>

<meta name="description" content="<?php echo $description->site_description; ?>"/>
<meta name="author" content="Tester" />
<title><?php echo (isset($pageTitle)) ? htmlspecialchars($pageTitle) : SITE_NAME; ?></title>
<?php //getDesignName() retourne le thème du site que l'utilisateur à choisi ?>
<link rel="stylesheet" type="text/css" href="<?php echo $bpath; ?>/design/<?php echo getDesignName(); ?>/style.css" />
<link rel="stylesheet" type="text/css" href="<?php echo $bpath; ?>/design/<?php echo getDesignName(); ?>/jquery-custom/jquery-ui-1.10.3.custom.min.css" />
<base href="http://<?php echo htmlspecialchars($_SERVER['HTTP_HOST']); ?>/" />

<!-- utils -->
<script type="text/javascript" src="./javasscripts/utils.js"></script>
<!-- jquery -->
<script type="text/javascript" src="./javasscripts/jquery-1.9.1.js"></script>
<script type="text/javascript" src="./javasscripts/jquery-ui-1.10.3.custom.min.js"></script>
<script type="text/javascript" src="./javasscripts/verif_pseudo.js"></script>
<script type="text/javascript" src="./javasscripts/verif_email.js"></script>
<script type="text/javascript" src="./javasscripts/tooltip.js"></script>
<!-- bbcode -->
<script type="text/javascript" src="./javasscripts/bbcode.js"></script>
<script type="text/javascript" src="./javasscripts/boite_de_dialogue.js"></script>
<script type="text/javascript" src="./javasscripts/menu_avec_habilage.js"></script>
<script type="text/javascript" src="./javasscripts/mperso.js"></script>
<script type="text/javascript" src="./javasscripts/previsualisation.js"></script>
<script type="text/javascript" src="./javasscripts/tous_smilies.js"></script>
<!-- widget -->
<script type="text/javascript" src="./javasscripts/widgets.js"></script>
<!-- choix multiple -->
<script type="text/javascript" src="./javasscripts/choix_multiple.js"></script>
<!-- accordion -->
<script type="text/javascript" src="./javasscripts/accordion.js"></script>
</head>
<body>
<div id="frame">
<div id="global">
<?php //$xajax->printJavascript(); ?>

<a id="top" title=""></a>
<?php getMaintenance(); ?>

<?php if(defined('SITE_LOGO'))
{ ?>
<div id="logo">
<a href="<?php echo getLienModule('index'); ?>"><img src="<?php echo SITE_LOGO; ?>" alt="<?php echo SITE_NAME; ?>" /></a>
</div>
<?php } ?>

<div id="header">
<?php require_once(DIR_INCLUDE . '/header.inc.php'); ?>
</div>
<?php
?>
<div id="menu" class="accordeon">
<?php require_once(DIR_INCLUDE . '/menu.inc.php'); ?>
</div>

<script type="text/javascript">
// prepare l'accordeon si on en en dessous de 500 en width
$(function() {
if(window.innerWidth < 500)
{
$(function() {
$('#menu').attr("class","accordeon");
$( ".accordeon" ).accordion();
});
}
});

//
window.onresize = function(event){

// restauration de l'accordeon
var restore = function (header,content)
{
header.attr("role","");content.attr("role","");
header.attr("aria-expanded","");content.attr("aria-expanded","");
header.attr("aria-selected","");content.attr("aria-selected","");
header.attr("tabindex","");content.attr("tabindex","");
};

if(window.innerWidth < 500)
{
$(function() {
$('#menu').attr("class","accordeon");
$( ".accordeon" ).accordion();
});
} else {
$(function() {
try
{
$('#menu').accordion('destroy');
}catch(err){
}
/*
$('.ui-icon').remove();
$('.ui-accordion-header').attr("class","contenuDuMenu");
$('.contenuDuMenu').mouseover("");
$('.ui-accordion-content').attr("class","contenuDuMenu");
$('.contenuDuMenu').mouseover("");
restore($('.ui-accordion-header'),$('.ui-accordion-content'));
$('#menu').attr("class","");
*/
});
}
};
</script>


<div id="content">
<?php

$fil = buildBreadcrumb($_GET['m'], ((!isset($_GET['sm']) || $_GET['sm'] == '') ? "index" : $_GET['sm']));
if(count($fil) > 0)
{
echo '<div id="fil_ariane">';

$i = 0;

foreach($fil as $url => $item)
{
$url = explode('/', $url);
$module = $url[0];

$section = "index";
if($i>0)
$section = $url[0];

$output = htmlspecialchars($item);

if($i < count($fil)-1 && (count($fil) > 2 && $i<>(count($fil)/2)))
$output = '<a href="'.getLienModule($module, $section).'">'.$output.'</a> > ';
else if(count($fil) > 2 && $i==(count($fil)/2))
$output = '<a href="javascript:void(0);" onclick="history.back(-2);">'.$output.'</a> > ';

if(count($fil)-1==1 && $i<1)
$output = '<a href="'.getLienModule($module, $section).'">'.$output.'</a> > ';
else
$output = $output;

echo $output;
$i++;
}

echo '</div>';
}
var_dump($_SESSION);
echo "<div class='message'>".$msg."</div>".$pageContent;unset($_SESSION['messageCommunication']);
saveUrl($_SERVER['REQUEST_URI']);
?>
</div>
<div id="footer">
<?php require_once(DIR_INCLUDE . '/footer.inc.php'); ?>
</div>

</div></div>
</body>
</html>
<?php
}

ob_end_flush();

?>
J'ai essayé ça en vue de reproduire le problème mais ce n'est pas ça :



Fichier test.php :



<?php

ob_start();
if(!isset($_SESSION))@session_start();
$pageContent = '';
getContent();
function getContent()
{
global $pageContent;

$pageContent = ob_get_contents();
ob_clean();

?>
<!DOCTYPE html>
<html lang="fr">
<body>
<a href="test2.php">test2</a>
<?php
echo " -- test : ".$_SESSION['var'].$pageContent;
?>
</body>
</html>
<?php
//return $var;
}

ob_end_flush();
$_SESSION['var'] = "";
?>





Fichier test2.php :



<html><body><?php

if(!isset($_SESSION))@session_start();
var_dump($_SESSION);

$_SESSION['var'] = 'content';

?>
<a href='test.php'>test.php</a></body></html>


Merci de votre aide

même sans le @ il n'y a pas d'erreur et que le problème est toujours là.


2 réponses

allo personne veux m'aider
1
allo
1