Si, es medio confuso sin visualizar el conjunto, voy a ver si lo simplifico
en una página tenés un botón o un form con un submit que tiene como destino una script php, la cual genera un csv, para forzar la descarga supongo que harás algo así
<?php
header('Content-Type: application/octet-stream');
echo "A,B,C";
?>
El usuario descargaria un archivo conteniendo
A,B,C
Obviamente tu php no puede tener impreso nada más que eso.
Vos entonces querés algún tipo de aviso para indicar que el csv se generó (que lo descargue ó no ya dependerá de el)
Eso de recargar el index y la sesion no lo tengo muy claro. Pero para lo del mensaje, sería necesario un paso intermedio, guardando el archivo.
Hay una condición para todo esto , que estés usando Apache (bueno puede que sea opcional pero habría que hacer algun cambio), en todo caso en este ejemplo si
Podés hacer toda la operación con Ajax, pero no me parece que se justificaría, usando un iframe oculto se puede lograr
Primero como vamos a guardar el csv, en la carpeta que los guardes, un .htaccess para forzar l descarga
.htaccess
Código Apache:
Ver originalAddType application/octet-stream .csv
perfil.php (paso algo con get solo para la demostración)
Código PHP:
Ver original<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>titulo</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<script type="text/javascript">
//<![CDATA[
function mensaje(texto){
document.getElementById('mensaje').innerHTML = texto;
}
//]]>
</script>
</head>
<body>
<a href="genera.php?perfil=X,Z,Y" target="genera">Descargar Perfil</a>
<div id="mensaje">
</div>
<iframe src="about:blank" name="genera" id="genera" width="0" height="0" frameborder="0"></iframe>
</body>
</html>
y ahora el genera.php
Código PHP:
Ver original<?php
$datos = $_GET['perfil'];
if($crearcvs !== false){
?>
<script type="text/javascript">
//<![CDATA[
/* script */
parent.mensaje('Se generó el archivo');
window.location.href='temp.csv';
//]]>
</script>
<?php
}else{
?>
<script type="text/javascript">
//<![CDATA[
/* script */
parent.mensaje('error');
//]]>
</script>
<?php
}
?>
La carpeta que guarde los csv tendría que tener permisos de escritura.
Bueno, esa es la idea general, tendrías de seguro que adaptar cosas, como el nombre del archivo generado, la eleiminación de los archivos temporales, etc
Saludos