2009-09-03 4 views
0

J'ai un système basé sur le Web construit avec des données de connexion utilisateur basées sur des variables de session. Parfois, lorsqu'un utilisateur est connecté et tente d'exporter des tables vers csv ou xls, les données de session semblent s'effacer et l'utilisateur est expulsé du système.Lorsque j'exporte des fichiers avec php/html, mes données de session sont réinitialisées

Ceci est le code d'en-tête que j'utilise pour servir le fichier.

header("Pragma: public"); 
    header("Expires: 0"); 
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 
    header("Content-Type: application/force-download"); 
    header("Content-Type: application/octet-stream"); 
    header("Content-Type: application/download"); 
    header("Content-Disposition: attachment;filename=file.xls"); 
    header("Content-Transfer-Encoding: binary "); 

Si cela aide, il semble être plus répandue sur ie6. Je me demandais si quelqu'un avait eu des problèmes similaires.

Ceci est le dernier en-tête que j'ai essayé. Toujours pas de chance. Également testé la même procédure dans FF/Opera/Safari et ils vont bien.

header('Cache-Control: no-store, private, no-cache, must-revalidate');  // HTTP/1.1 
    header('Cache-Control: pre-check=0, post-check=0, max-age=0, max-stale = 0', false); // HTTP/1.1 
    header('Expires: Sat, 26 Jul 1997 05:00:00 GMT');     // Date in the past 
    header('Expires: 0', false); 
    header('Last-Modified: '.gmdate('D, d M Y H:i:s') . ' GMT'); 
    header('Pragma: no-cache'); 
    header("Content-Type: application/vnd.ms-excel"); 
    header("Content-Disposition: attachment;filename=$fileName"); 
      header("Content-Transfer-Encoding: binary "); 
+0

l'en-tête expires devrait être dans ce format (oui GMT): Expire: Thu, 01 Dec 1994 16:00:00 GMT – OIS

Répondre

3

L'en-tête Pragma: public est tout à fait inapproprié pour les utilisateurs connectés et ne va pas aider à quoi que ce soit.

Je suis également un peu perplexe quant à la raison pour laquelle vous utilisez autant d'en-têtes Content-Type. Choisissez un et un seul.

Enfin, ce sont les en-têtes que vous définissez explicitement ... Vous n'avez aucun appel à session_destroy ou setcookie flottant autour de vous faire?

+0

Merci pour la réponse, non leur certainement pas d'appels pour détruire la session, je vais donner votre Suggère un coup et regarde comment ça se passe. – Shane

+0

Si le problème réside dans la diffusion de pages mises en cache public auprès des utilisateurs connectés, vous souhaiterez peut-être vérifier les réponses sur cet autre thread: http://stackoverflow.com/questions/49547/making-sure-a-webpage- is-not-cached-across-all-browsers – searlea

+0

Hmm ça ne marche vraiment pas. Même lorsque j'enlève la plupart des en-têtes, nous n'avons pas encore appelé session_destory ou setcookie. Y a-t-il d'autres appels que le système pourrait faire pour causer de tels problèmes? Pour élaborer si j'ouvre IE6, connectez-vous et appuyez sur Exporter vers Xls je suis expulsé. Je me reconnecte à nouveau et je presse l'export vers Xls, le fichier est parfaitement bien servi. – Shane

Questions connexes