2009-09-03 13 views
0

我有一个基于Web的系统,基于会话变量建立用户登录数据。当我用php/html导出文件我的会话数据重置

有时,当用户登录并尝试将表导出到csv或xls时,会话数据似乎被擦除,用户被“踢出”系统。

这是我用来提供文件的标题代码。

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 "); 

如果它有帮助,它似乎在ie6上更普遍。我想知道是否有人有类似的问题。

这是我试过的最新的头文件。仍然没有运气。还测试了完全相同的程序在FF /歌剧/ Safari和他们很好。

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

expires标题应该采用这种格式(yes GMT):过期:1994年12月1日星期四16:00:00 GMT – OIS 2009-09-03 15:34:31

回答

3

Pragma: public头是登录用户完全不合适的,并不会帮助任何东西。

我对你为什么使用这么多Content-Type标题也感到有点困惑。只选择一个和一个。

最后,这些是你明确设置的标题......你没有任何电话session_destroysetcookie漂浮在你身边吗?

+0

感谢您的回复,他们绝对没有电话销毁会话,我会给你建议一个镜头,看看它是怎么回事。 – Shane 2009-09-03 14:59:57

+0

如果问题在于向登录用户提供公共缓存页面,则可能需要在其他线程上签出答案:http://stackoverflow.com/questions/49547/making-sure-a-webpage-是不是所有浏览器缓存 – searlea 2009-09-03 15:26:22

+0

嗯,这绝对不会工作。即使我删除了大部分头文件,我们当然也没有调用session_destory或setcookie。系统可以做出任何其他调用来引起此类问题吗?详细说明,如果我打开IE6,登录并按导出到XLS我被踢出。我再次登录并按导出到Xls,该文件服务完好。 – Shane 2009-09-03 15:49:40

相关问题