conflit ob_start et session ? comment unsetter ?

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : conflit ob_start et session ? comment unsetter ?

Re: conflit ob_start et session ? comment unsetter ?

par moogli » 13 sept. 2013, 22:29

salut,
Quand j'utilise l'ob_start je ne peux pas faire d'unset de la var de session sinon elle ne s'affiche plus.
si tu fait un unset c'est normale que variable n'existe plus. je ne vois pas ou est le problème...


sinon
<?php
if(!isset($_SESSION))
peux être remplacé par l'utilisation de session_status et la fonction header_send afind e savoir si le session_start peux être placé.


@+

Re: conflit ob_start et session ? comment unsetter ?

par xTG » 13 sept. 2013, 13:16

Je n'ai pas testé mais je dirai que les variables ne sont pas renseignées en dur dans le flux tant que le buffer n'est pas flushé.
Donc du coup si tu unset une variable avant le flush elle n'apparaîtra pas dans le buffer renvoyé.

Tu peux tester ce cas en utilisant un flag indiquant qu'il faut unset la variable et faire ce traitement après le flush.

conflit ob_start et session ? comment unsetter ?

par zulad » 12 sept. 2013, 21:45

Bonjour,

j'ai une page qui me pose un sérieux problème. Quand j'utilise l'ob_start je ne peux pas faire d'unset de la var de session sinon elle ne s'affiche plus.
J'ai essayé de reproduire le problème sans succès, je ne comprends pas... Est-ce que quelqu'un voit quelque chose ?

Ne faites pas attention aux include's... La page doit afficher une variable de session $msg = $_SESSION['messageCommunication']; sans succès...
<?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&#65533;claration de la fonction MaFonctionPHP.
			$xajax->processRequest(); // Fonction qui va se charger de g&#65533;n&#65533;rer le Javascript &#65533; partir des donn&#65533;es que l'on a fournies &#65533; 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(); 
 
?>